首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIDynamics与器件旋转

UIDynamics与器件旋转
EN

Stack Overflow用户
提问于 2013-09-27 20:28:09
回答 3查看 1.4K关注 0票数 5

如果我将任何类型的UIDynamicBehavior添加到我的视图中,当设备被旋转时,它就会完全崩溃。下面是肖像画中的内容(正确显示):

在这里,它是在风景中,一切都破产了:

我不认为这是一个自动收费的问题,因为如果我删除添加UIDynamicBehavior的调用,就可以正常工作,不会出现自动收费问题。也不会抛出任何自动收费错误。下面是代码:

代码语言:javascript
复制
@interface SWViewController () {
  UICollisionBehavior *coll;
  UIDynamicAnimator *dynamicAnimator;
}

@implementation SWViewController
- (void)viewDidLoad {
  [super viewDidLoad];
  dynamicAnimator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view];
}

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  [self setupCollisions]; // commenting this out fixes the layout
}

- (void)setupCollisions {
  NSArray *dynamicViews = @[greenView];
  coll = [[UICollisionBehavior alloc] initWithItems:dynamicViews];    
  CGFloat topBound = CGRectGetMinY(greenView.frame);
  [coll addBoundaryWithIdentifier:@"top"
                        fromPoint:CGPointMake(0, h1)
                          toPoint:CGPointMake(CGRectGetWidth(greenView.frame), h1)];    
  [dynamicAnimator addBehavior:coll];
}

如果我重写了didRotateFromInterfaceOrientation,我可以看到greenView的顶部边界没有遵循autolayout的要求(同样,删除对setupCollisions的调用就可以修复这个问题)。

greenView上的自动收费边界是:

代码语言:javascript
复制
height = 200
trailing space to Superview = 0
leading space to Superview = 0
bottom space to Superview = 0
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-27 21:54:16

我找到的一个解决方案是覆盖willRotateToInterfaceOrientation:并删除UIDynamicItems,然后将它们重新添加到didRotateFromInterfaceOrientation:中。在我看来,这相当麻烦,一旦我添加了更复杂的行为,可能会引入bug。

票数 2
EN

Stack Overflow用户

发布于 2013-10-24 20:24:42

动态动画师正在改变涉及视图的框架。因此,任何动画都会受到对-[UIView setNeedsLayout]的调用的干扰(无论动态动画状态如何,视图都会被放置到约束驱动的位置。

我的观察是,您使用自动生成的布局约束,动态动画师从动画所涉及的任何视图中删除它们。

如果您添加了自己的布局约束--它们会持续存在--但是当视图被要求重新计算布局时,可能会干扰您的动画。

票数 0
EN

Stack Overflow用户

发布于 2013-12-29 02:59:03

请再次检查您的汽车布局限制。

我有一个非常相似的问题:

在我的例子中,我有一个子视图,MyView,它有一组约束:v:AC.26-(0)-MyView,V:MyView-(0)-|,H:MyView:(==300),它在out UIDynamics中运行良好。但是在将UIDynamics添加到MyView之后,宽度在旋转过程中会发生变化,这与您的问题非常相似。

我通过再添加一个约束来修正这个问题:h:区-(0)-MyView

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19059538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档