连续两次动画后定位失败

时间:2015-03-30 13:47:03

标签: ios objective-c animation autolayout

我在我的应用中创建了一个相当简单的几个按钮和图像的动画。基本上它看起来像一个展开的菜单。

我使用自动布局故事板来管理视图,并且我已经设置了适当的约束,因此它在每个设备上看起来都是一样的。

首次显示时,我在这些按钮上有两个按钮和两个图像, 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}}。

我想动画和自动布局约束之间存在一些冲突,但我无法弄明白。

帮助!

感谢您的时间。

1 个答案:

答案 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];
}];

如果您需要更多帮助或某些内容尚不清楚,请与我们联系。祝你好运!