iOS-removedOnCompletion与fillMode方法


    _viewAnimation = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    _viewAnimation.backgroundColor = [UIColor redColor];
    [self.view addSubview:_viewAnimation];

    CABasicAnimation *positionAnima = [CABasicAnimation animationWithKeyPath:@"position.y"];
    positionAnima.duration = 0.8;
    positionAnima.fromValue = @(self.viewAnimation.center.y);
    positionAnima.toValue = @(self.viewAnimation.center.y+100);
    positionAnima.removedOnCompletion = NO;
    positionAnima.fillMode = kCAFillModeForwards;
    
    [self.viewAnimation.layer addAnimation:positionAnima forKey:@"AnimationMoveY"];

一个简单的移动动画。

需要注意以下两个参数

  • fillMode


    iOS-removedOnCompletion与fillMode方法_第3张图片
    官方解释
大意:fillMode的作用就是决定当前对象过了非active时间段的行为. 比如动画开始之前,动画结束之后
kCAFillModeRemoved 这个是默认值,也就是说当动画开始前和动画结束后,动画对layer都没有影响,动画结束后,layer会恢复到之前的状态 
kCAFillModeForwards 当动画结束后,layer会一直保持着动画最后的状态 
kCAFillModeBackwards 这个和kCAFillModeForwards是相对的,就是在动画开始前,你只要将动画加入了一个layer,layer便立即进入动画的初始状态并等待动画开始.你可以这样设定测试代码,将一个动画加入一个layer的时候延迟5秒执行.然后就会发现在动画没有开始的时候,只要动画被加入了layer,layer便处于动画初始状态 
kCAFillModeBoth 理解了上面两个,这个就很好理解了,这个其实就是上面两个的合成.动画加入后开始之前,layer便处于动画初始状态,动画结束后layer保持动画最后的状态.
  • removedOnCompletion
大意:当动画完成后自动变回原样

有了这两个参数之后,动画结束后view便保持结束状态,但是它的frame值并没有发生改变
开始的frame:(origin = (x = 100, y = 100), size = (width = 100, height = 100))
结束的frame:(origin = (x = 100, y = 100), size = (width = 100, height = 100))

你可能感兴趣的:(iOS-removedOnCompletion与fillMode方法)