代码之家  ›  专栏  ›  技术社区  ›  Thanks

为什么此CAKeyFrameAnimation在透明度为零时停止?

  •  2
  • Thanks  · 技术社区  · 16 年前

    CALayer *layer = self.layer;
    CAKeyframeAnimation *blinkAnim = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
    blinkAnim.duration = 1.0;
    //blinkAnim.repeatCount = 0;
    blinkAnim.autoreverses = NO;
    
    // keyframe times and values
    // we want to start fully opaque, fade out, stay faded out and fade back in shortly before the end of the cycle
    blinkAnim.keyTimes = [NSArray arrayWithObjects: [NSNumber numberWithFloat:0.0],
                          [NSNumber numberWithFloat:0.4],
                          [NSNumber numberWithFloat:0.6],
                          [NSNumber numberWithFloat:0.85],
                          [NSNumber numberWithFloat:1.0], nil];
    blinkAnim.values = [NSArray arrayWithObjects:   [NSNumber numberWithFloat:1.0],
                        [NSNumber numberWithFloat:1.0],
                        [NSNumber numberWithFloat:0.0],
                        [NSNumber numberWithFloat:0.0],
                        [NSNumber numberWithFloat:0.5], nil];
    [layer addAnimation:blinkAnim forKey:nil];
    
    1 回复  |  直到 16 年前
        1
  •  5
  •   Nathan de Vries    16 年前

    默认值 fillMode (参见 here )对于a CAAnimation kCAFillModeRemoved 。你应该设置 fillMode 您的动画 kCAFillModeForwards ,并设置 removedOnCompletion 财产 NO (默认情况下 YES ):

    blinkAnim.removedOnCompletion = NO;
    blinkAnim.fillMode = kCAFillModeForwards;
    

    您会注意到,这些属性是在我为您之前的问题编写的源代码中设置的——它们存在是有原因的。