我有这个代码。在值数组的末尾,您可以看到我提供了 0.5 的不透明度。但由于某种原因,当动画停止时,它会再次闪烁,然后使视图完全透明。那里出了什么问题?
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];
默认fillMode
(see here http://developer.apple.com/documentation/graphicsimaging/Reference/CAMediaTiming_protocol/Introduction/Introduction.html#//apple_ref/doc/constant_group/Fill_Modes) for a CAAnimation
is kCAFillModeRemoved
。您应该设置fillMode
你的动画到kCAFillModeForwards
,并且还设置removedOnCompletion
财产给NO
(默认情况下是YES
):
blinkAnim.removedOnCompletion = NO;
blinkAnim.fillMode = kCAFillModeForwards;
您会注意到这些属性是在我为您之前的问题编写的源代码中设置的——它们在那里是有原因的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)