我在我的应用中创建了一个相当简单的几个按钮和图像的动画。基本上它看起来像一个展开的菜单。
我使用自动布局故事板来管理视图,并且我已经设置了适当的约束,因此它在每个设备上看起来都是一样的。
首次显示时,我在这些按钮上有两个按钮和两个图像,
NSLog(@"Button position is %@", NSStringFromCGRect(_toclass.frame));
NSLog(@"Image position is %@", NSStringFromCGRect(_revel2.frame));
我得到了答案:按钮位置为{{0,153},{600,133}},图像位置为{{254,179},{92,60}}。
我设置以下变量并执行第一个动画:
Hprofile = 20;
Hclass = 153;
Htuto = 2 * Hclass;
Hicones = 26;
[UIView animateWithDuration:1.2
delay:0
options:(UIViewAnimationOptions) UIViewAnimationCurveEaseInOut
animations:^{
[_toclass setFrame:CGRectMake(0, -Htuto, self.view.bounds.size.width, _toclass.frame.size.height)];
[_revel2 setFrame:CGRectMake(_revel2.frame.origin.x, -Htuto+Hicones, 92, 60)];
}
completion:^(BOOL finished){
}];
完成此动画(工作正常)后,还有另一个按钮可用于返回之前的设置:
[UIView animateWithDuration:1
delay:0
options:(UIViewAnimationOptions) UIViewAnimationCurveEaseInOut
animations:^{
[_toclass setFrame:CGRectMake(0, Hclass, self.view.bounds.size.width, 133)];
[_revel2 setFrame:CGRectMake(_revel2.frame.origin.x, Hclass+Hicones, 92, 60)];
}
completion:^(BOOL finished){
NSLog(@"Button position is %@", NSStringFromCGRect(_toclass.frame));
NSLog(@"Image position is %@", NSStringFromCGRect(_revel2.frame));
}];
在此动画之后,按钮位于正确的位置,但图像不是。 我得到答案:按钮位置为{{0,123},{320,102.5}},图像位置为{{114,179},{92,60}}。
我想动画和自动布局约束之间存在一些冲突,但我无法弄明白。
帮助!
感谢您的时间。
答案 0 :(得分:0)
如果您使用自动布局,则不应再更改框架,您应该使用约束。
据我所知,你可以从代码中理解,你想要上下移动你的按钮和图像。正确的方法是从故事板中的顶部偏移约束(对于按钮和图像)创建一个IBOutlet,并更改它们上的常量以使其适合您的动画。
这样的东西而不是第一帧修改。
[UIView animateWithDuration:1.2
delay:0
options:(UIViewAnimationOptions) UIViewAnimationCurveEaseInOut
animations:^{
[self.buttonTopOffsetConstraint setConstant:-Htuto];
[self.imageTopOffsetConstraint setConstant:(-Htuto+Hicones)];
[self.view layoutIfNeeded];
}];
如果您需要更多帮助或某些内容尚不清楚,请与我们联系。祝你好运!