web-dev-qa-db-ja.com

ココア:NSViewアニメーション

これはできる限りシンプルなので、人生のどこに問題があるのか​​を見つけることはできません。ドキュメントをガイドとして調べましたが、それでも機能しませんでした。大きなビューの中にビューがあります。 IBActionは内部のビューをフェードアウトすることになっています...それだけです。ここに私が持っているものがあります:

NSViewAnimation *theAnim;
NSMutableDictionary *viewDict;

// Create the attributes dictionary for the view.
viewDict = [NSMutableDictionary dictionaryWithCapacity:2];

// Set the target object to be the view.
[viewDict setObject:_innerView forKey:NSViewAnimationTargetKey];

// Set this view to fade out
[viewDict setObject:NSViewAnimationFadeOutEffect forKey:NSViewAnimationEffectKey];

theAnim = [[NSViewAnimation alloc] initWithViewAnimations:@[viewDict]];

// Set some additional attributes for the animation.
[theAnim setDuration:1.0];

// Run the animation.
[theAnim startAnimation];

NSLogsでviewDictとtheAnimを確認しましたが、どちらもnilではありません。私はこれが機能していた古いプログラムからこれをほとんどコピーしましたが、現在何が問題なのかを見つけることができません。

Xcode 5.1.1を使用しています

28
Elbimio

現代のアプローチははるかに簡単です:

[NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
    context.duration = 1;
    view.animator.alphaValue = 0;
}
completionHandler:^{
    view.hidden = YES;
    view.alphaValue = 1;
}];

ビュー階層がレイヤーバッキングの場合、実際には次のことで十分です。

view.animator.hidden = YES;
69
Ken Thomases