iOS动画在后台/前景转换后停止

时间:2017-04-17 12:15:20

标签: ios objective-c animation

我正在编写一个页面,检查设备是否已链接到系统。 该页面每2秒发送一次请求6次,在此期间(可能长达10秒)该页面显示一个动画加载圈。

问题在于:当我按下主页按钮并立即重新打开应用程序时,动画停止

以下是我所知道的:

实现动画的两种方式:

  1. CABasicAnimation

    CABasicAnimation* rotationAnimation;
    rotationAnimation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
    rotationAnimation.toValue = @(2 * M_PI);
    rotationAnimation.duration = 1.5;
    rotationAnimation.cumulative = YES;
    [loadingCircle.layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];
    
  2. UIView animateWithDuration...

    - (void)rotateView:(UIView *)view {
        [UIView animateWithDuration:0.75 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
            view.transform = CGAffineTransformRotate(view.transform, M_PI);
        } completion:^(BOOL finished) {
            if (finished) {
                [self rotateView:view];
            }
        }];
    }
    ...
    - viewDidLoad {
        ...
        [self rotateView:loadingCircle];
    }
    
  3. 我知道在第一个实现中,设置rotationAnimation.removedOnCompletion = NO;将恢复动画。

    我的问题是:当我使用第二个实现时,实现相同效果的等效方法是什么。

1 个答案:

答案 0 :(得分:1)

使用UIView animateWithDuration实际上对视图的基础l属性应用相同的效果,因此您可以像这样暂停和恢复。

beq_nat h x

你必须自己将其转化为客观c,抱歉。归功于原始解决方案here

如果您希望将代码保留在本地而不是放入应用代理,则可以通过layer订阅func pauseLayer(layer: CALayer) { let pausedTime: CFTimeInterval = layer.convertTime(CACurrentMediaTime(), fromLayer: nil) layer.speed = 0.0 layer.timeOffset = pausedTime } func resumeLayer(layer: CALayer) { let pausedTime: CFTimeInterval = layer.timeOffset layer.speed = 1.0 layer.timeOffset = 0.0 layer.beginTime = 0.0 let timeSincePause: CFTimeInterval = layer.convertTime(CACurrentMediaTime(), fromLayer: nil) - pausedTime layer.beginTime = timeSincePause } 通知。返回时,您可以使用匹配的UIApplicationDidEnterBackgroundNotification通知重新启动动画。