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

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

我不认为这是一个自动收费的问题,因为如果我删除添加UIDynamicBehavior的调用,就可以正常工作,不会出现自动收费问题。也不会抛出任何自动收费错误。下面是代码:
@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上的自动收费边界是:
height = 200
trailing space to Superview = 0
leading space to Superview = 0
bottom space to Superview = 0发布于 2013-09-27 21:54:16
我找到的一个解决方案是覆盖willRotateToInterfaceOrientation:并删除UIDynamicItems,然后将它们重新添加到didRotateFromInterfaceOrientation:中。在我看来,这相当麻烦,一旦我添加了更复杂的行为,可能会引入bug。
发布于 2013-10-24 20:24:42
动态动画师正在改变涉及视图的框架。因此,任何动画都会受到对-[UIView setNeedsLayout]的调用的干扰(无论动态动画状态如何,视图都会被放置到约束驱动的位置。
我的观察是,您使用自动生成的布局约束,动态动画师从动画所涉及的任何视图中删除它们。
如果您添加了自己的布局约束--它们会持续存在--但是当视图被要求重新计算布局时,可能会干扰您的动画。
发布于 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
https://stackoverflow.com/questions/19059538
复制相似问题