以下、私のコードセクションを示します。不透明度のアニメーションを実装して、ボタンにブレス効果を表示したいと考えています。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];
}
}
実際には、私は2つのCALayerを削除するために息のアニメーションの停止を知る必要があります。しかし、私はanimationDidStop()
でフラグがNOになっていますが、アニメーションが正しく完了していないことを示し、アニメーションが表示されていません。 次に、私は[self removeBreathAnimationLayers]
を呼び出して2つのCALayerを削除しようとしましたが、アニメーションはうまくいきます。
この問題に関するお問い合わせはありますか?私は本当にアニメーションが正常に停止することを知る必要があります。
ご返信いただきありがとうございます。どうもありがとう!
-Roby