我正在为iPhone 5更大的屏幕更新我的iPhone应用程序,animateWithDuration:
似乎有问题。在我打开自动布局之前,当UITextField成为第一响应者时,界面元素将在屏幕上稍微向上移动,并且当UITextField失去其第一响应者状态时,它将向下移回其原始位置。现在,他们只是偶然地飞起来离开屏幕,我不明白为什么。我使用下面的代码移动对象(这与autolayout关闭一起工作):
[UIView animateWithDuration:.25 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{
int offset = 160;
[object1 setFrame:CGRectMake(0, -offset, object1.frame.size.width, object1.frame.size.height)];
[object2 setFrame:CGRectMake(object2.frame.origin.x, object2.frame.origin.y-offset, object2.frame.size.width, object2.frame.size.height)];
[object3 setFrame:CGRectMake(object3.frame.origin.x, object3.frame.origin.y-offset, object3.frame.size.width, object3.frame.size.height)];
}
completion:^(BOOL finished){}];
是否与尝试通过常量移动对象有关?即使我将offset
设置为0
,所有对象仍然会离开屏幕。我已经尝试检测设备有哪个屏幕并以不同的数量移动对象,但这也没有用。有没有人有任何想法?
提前致谢!
答案 0 :(得分:2)
使用自动布局时,除非这些是使用translatesAutoresizingMaskIntoConstraints = YES
手动添加到视图的对象,否则autolayout通常会通过更改框架来阻止尝试设置动画。如果存在任何会导致重新应用约束的内容,则对象将移回到约束条件应该存在的任何位置,从而覆盖您调整其frame
属性的尝试。
如果在使用自动布局时动画显示此类对象的移动,您可以(a)为其顶部约束创建IBOutlet
(如果调整y
;如果调整x
也是如此,你也可以使用前导约束,然后更改该约束的constant
属性,然后从动画块中调用layoutIfNeeded
;或(b)删除约束并创建新约束。 (我一般都是前者。)
请参阅this answer的后半部分,了解如何为约束创建IBOutlet
,然后更改动画块中的constant
属性。