0

アニメーション化するNSViewサブクラスがいくつかあります(フレームとアルファ値を変更します)。アニメーションを停止する必要がある場合もありますが、エラーが発生し続けます

コードは次のとおりです。

[NSAnimationContext beginGrouping];
[[NSAnimationContext currentContext] setDuration:1.5f];
[textView.animator setFrame:frame];
[textView.animator setAlphaValue:0.0];
[NSAnimationContext endGrouping];

if ([textView.animator isAnimating]) { // Here the exception is raised
    NSLog(@"%@ is animating!", textView);
}

私は電話をかけようとしています[textView.animator isAnimating]が、それは私に

Exception detected while handling key input.
*** -[NSProxy doesNotRecognizeSelector:isAnimating] called!

コードを使用したプロジェクトの例は、https://bitbucket.org/lukaszb/animationartifacts/src/0dc41660f26dd3b629c28bbbda6eb647にあります。

isAnimatingサブクラスにプロパティを追加NSViewして、アニメーションの開始時と完了ハンドラーに設定することもできますが、それによって競合状態の問題が発生する可能性もあります。

ビューがアニメーション化されているかどうかを検出する方法を教えてもらえますか?

4

1 に答える 1

0

どちらNSViewもそのアニメーターにもプロパティanimatingがないため、その値を照会することはできません。

ただし、ご提案のとおり、その目的のために独自のプロパティを定義できます。NO秘訣は、アニメーションが完了したら元に戻すことです。これcompletionHandlerは、現在のアニメーションコンテキストのプロパティを使用して行うことができます。

[NSAnimationContext beginGrouping];
[NSAnimationContext currentContext].completionHandler = ^{ self.animating = NO; };
// ... set up your animation ...
[NSAnimationContext endGrouping];

animatingブロックはメインスレッドで呼び出されることに注意してください(ドキュメントに示されているように)。したがって、メインスレッドで常にプロパティを設定している限り、状態が一貫していることが保証されます。UIコードを扱っているので、おそらくそうです。

于 2013-01-23T08:55:49.663 に答える