UIView动画忽略持续时间第二次来到控制器为什么?

时间:2014-05-14 15:15:49

标签: ios

我第一次从控制器A到B时有两个ViewController A和B它的工作正常,但是当我回到控制器A然后回到B UIView动画块时忽略了完成块被调用的持续时间立即。 任何人都知道为什么这样做?

解决方案 最后(Me& Mawoon)在开始动画编写此单行代码之前找到了我自己的解决方案。

[UIView setAnimationsEnabled:YES];

请参阅下面的代码。

-(void)doAnimation
{
    __weak typeof(self) weakSelf = self;
    view2=(UIView*)[self.view viewWithTag:100];
    [UIView setAnimationsEnabled:YES];
    [UIView animateWithDuration:3.0 animations:^{
        view2.frame=CGRectMake(0, 30, 1024,768);
        view2.alpha=1.0;
    } completion:^(BOOL finished){
        view2.frame=CGRectMake(0, 0, 1024,768);
        view2.alpha=0.0;
        [weakSelf doAnimation];
    }];
}

1 个答案:

答案 0 :(得分:2)

首先,您必须对调用块本身进行弱引用,然后启用动画,因为当您从视图控制器弹出时,动画将被释放,因此您需要再次启用动画。

[UIView setAnimationsEnabled:YES];

所以这是完整的代码:

 -(void)doAnimation
    {
     __weak typeof(self) weakSelf = self;
     view2=(UIView*)[self.view viewWithTag:100];
     [UIView setAnimationsEnabled:YES];
     [UIView animateWithDuration:3.0 animations:^{       
         view2.frame=CGRectMake(0, 30, 1024,768);
         view2.alpha=1.0       
     } completion:^(BOOL finished){  
         view2.frame=CGRectMake(0, 0, 1024,768);
         view2.alpha=0.0 
        [weakSelf doAnimation];  
     }];
     }