UIView动画完成

时间:2014-08-17 14:04:41

标签: ios objective-c animation

我有以下代码,完全正常。它的作用是将动态创建的图像从一个点移动到另一个点。

    [UIView animateWithDuration:duration
                      delay:0
                    options:UIViewAnimationOptionCurveEaseOut
                 animations:^{
                     [UIView setAnimationBeginsFromCurrentState:YES];
                     CGAffineTransform transform = CGAffineTransformMakeTranslation(x, y);
                     image.transform = transform;
                 }
                 completion:^(BOOL finished){

                     if (finished) {
                         NSLog(@"finished animation in true");
                         [arrOfTempImages removeObject:image];
                         image.image = nil;
                         // and do some other stuff here
                     } else {
                         NSLog(@"finished animation in false");
                     }
                 }];

但是,有时候我需要更改viewController,所以当视图即将消失时,我会使用apple的文档中的这个方法暂停动画:

-(void)pauseLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.speed = 0.0;
layer.timeOffset = pausedTime;
}

这也完美无缺。当我回到旧VC时,我使用以下方法恢复动画:

-(void)resumeLayer:(CALayer*)layer
{
CFTimeInterval pausedTime = [layer timeOffset];
layer.speed = 1.0;
layer.timeOffset = 0.0;
layer.beginTime = 0.0;
CFTimeInterval timeSincePause = [layer convertTime:CACurrentMediaTime() fromLayer:nil] - pausedTime;
layer.beginTime = timeSincePause;
}

哪个再次正常....但问题是代码" NSLog(@"完成动画的假和#34;); "当我改变VC并且当我回到原始VC并等待图像到达终点时,正在执行,这个代码也没有" NSLog(@"完成动画的真实" );"被执行。这意味着图像到达终点时,不会指向零并保留在屏幕上。

我该怎么办?我想在"完成中执行一些代码:"但是在重新输入原始VC时,该部分代码不再被调用

1 个答案:

答案 0 :(得分:0)

根据Apple's docs,在iOS 4+中不鼓励使用[UIView setAnimationBeginsFromCurrentState:YES]

相反,请尝试将选项参数从UIViewAnimationOptionCurveEaseOut更改为UIViewAnimationOptionBeginFromCurrentState,然后调用完成块。