0
这里是我的代码部分下面,我希望实现一个不透明的动画来显示按钮上的呼吸效果。CAKeyFrameAnimation失败没有任何线索
NSString* kAnimation = @"animation";
NSString* kBreath = @"breath";
NSString* kHide = @"hide";
NSString* kOpacity = @"opacity";
- (void) breathAnimation {
................
CAKeyframeAnimation *darkblueBreathAnimation = [CAKeyframeAnimation animationWithKeyPath:kOpacity];
NSArray *darkblueOpacityValues = [NSArray arrayWithObjects:[NSNumber numberWithFloat:1.0f],
[NSNumber numberWithFloat:0.0f],
[NSNumber numberWithFloat:1.0f],
nil];
NSArray *darkblueOpacityTimes = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f],
[NSNumber numberWithFloat:0.5f],
[NSNumber numberWithFloat:1.0f],
nil];
[darkblueBreathAnimation setValues:darkblueOpacityValues];
[darkblueBreathAnimation setKeyTimes:darkblueOpacityTimes];
[darkblueBreathAnimation setDuration:1.0f];
[darkblueBreathAnimation setRepeatCount:2];
[darkblueBreathAnimation setFillMode:kCAFillModeRemoved];
[darkblueBreathAnimation setCalculationMode:kCAAnimationLinear];
[darkblueBreathAnimation setRemovedOnCompletion:YES];
[darkblueBreathAnimation setDelegate:self];
[darkBlueLayer_ addAnimation:darkblueBreathAnimation forKey:kBreath];
CAKeyframeAnimation *lightblueBreathAnimation = [CAKeyframeAnimation animationWithKeyPath:kOpacity];
NSArray *lightblueOpacityValues = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f],
[NSNumber numberWithFloat:1.0f],
[NSNumber numberWithFloat:0.0f],
nil];
NSArray *lightblueOpacityTimes = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0f],
[NSNumber numberWithFloat:0.5f],
[NSNumber numberWithFloat:1.0f],
nil];
[lightblueBreathAnimation setValues:lightblueOpacityValues];
[lightblueBreathAnimation setKeyTimes:lightblueOpacityTimes];
[lightblueBreathAnimation setDuration:1.0f];
[lightblueBreathAnimation setRepeatCount:2];
[lightblueBreathAnimation setFillMode:kCAFillModeRemoved];
[lightblueBreathAnimation setCalculationMode:kCAAnimationLinear];
[lightblueBreathAnimation setRemovedOnCompletion:YES];
[lightblueBreathAnimation setDelegate:self];
[lightblueBreathAnimation setValue:kBreath forKey:kAnimation];
[lightBlueLayer_ addAnimation:lightblueBreathAnimation forKey:kBreath];
...................
}
- (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
NSString* value = (NSString*)[anim valueForKey:kAnimation];
NSLog(@"Roby: value = %@", value);
if ([[anim valueForKey:kAnimation] isEqualToString:kHide]) {
//TODO
} else if ([[anim valueForKey:kAnimation] isEqualToString:kBreath]) {
[self removeBreathAnimationLayers];
}
}
实际上,我需要知道呼吸动画停止移除两个CALayer。但是,我在animationDidStop()
得到了NO,表示动画未正确完成,并且没有显示呼吸动画。 然后,我试图不调用[self removeBreathAnimationLayers]
删除两个CALayer,动画效果很好。
有没有人对这个问题有任何建议?我真的需要知道动画停止成功做别的事情。
感谢您的回复。非常感谢!
-Roby