NSViewのレイヤーのプロパティが編集/誤っているようです。下のコードでは、アニメーションは完全に機能し、すべて正常に見えます。 NSlogsからの出力は常に、次のとおりです。NSView CALayer Opacity Madness
anim over opacity = 1.00000
first opacity = 0.50000
current opacity = 0.00000
updated opacity = 0.00000
最初の2つのログには、右に見える、そうでもアニメーションが停止した時に、層が正常に動作しているように思われます。しかし、しばらくして不透明度をチェックすると、魔法のように0になってしまいました。レイヤーの不透明度を1に設定した直後にそれを確認しても、それはまだ0です。
レイヤー内でsetneedsdisplayを使用していて、nsviewでsetneedsdisplay:YESと表示され、 が役に立たなかった。どんな提案も大歓迎です。
- (void) someSetupAnimationMethod {
aLayer = [CALayer layer];
[theView setWantsLayer:YES];
[theView setLayer:aLayer];
[aLayer setOpacity:0.0];
CABasicAnimation *opacity = [CABasicAnimation animationWithKeyPath:@"opacity"];
opacity.byValue = [NSNumber numberWithFloat:1.0];
opacity.duration = 0.3;
opacity.delegate = self;
opacity.fillMode = kCAFillModeForwards;
opacity.removedOnCompletion = NO;
[opacity setValue:@"opacity done" forKey:@"animation"];
[aLayer addAnimation:opacity forKey:nil];
}
- (void) animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
if([[anim valueForKey:@"animation"] isEqualToString:@"opacity done"]) {
NSLog(@"anim over opacity = %f", aLayer.opacity);
aLayer.opacity = 0.5;
[aLyaer removeAllAnimations];
NSLog(@"first opacity = %f", aLayer.opacity);
}
}
- (void) someLaterMethod {
NSLog(@"current opacity = %f", aLayer.opacity);
aLayer.opacity = 1.0;
NSLog(@"updated opacity = %f", aLayer.opacity);
}
また、nsviewでレイヤーを設定する適切な方法は何ですか? – Ryan