sizeSubviewsWithOldSize の呼び出し中にアニメーター プロキシでコア アニメーションをトリガーするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/114970

  •  02-07-2019
  •  | 
  •  

質問

いくつかの NSView があり、ウィンドウのサイズに応じて 2 つのレイアウトのいずれかに配置しています。

関連するスーパービューがresizeSubviewsWithOldSizeメソッドを受け取ったときにレイアウトを調整しています。

これは機能しますが、変更をアニメーション化したいと思います。したがって、当然のことながら、新しいフレームを設定するときにアニメーター プロキシを呼び出そうとしましたが、ユーザーがドラッグしている間はアニメーションは実行されません。アニメーションが実行される予定の前にマウスを放すと、アニメーションの最後が表示されますが、それまでは何も表示されません。kCATransactionDisableActions が NO に設定されていることを確認してみましたが、役に立ちませんでした。

新しいアニメーションを開始して、サイズ変更中に実際に実行することは可能ですか?

役に立ちましたか?

解決

CA のアニメーションはタイマーを介して実行され、ユーザーがドラッグしているときにアクティブなランループ モード中にはタイマーが起動しないため、これを簡単に実行できるとは思いません。

ユーザーがドラッグしているときにランループを制御できる場合は、ランループ モードを試してください。それでうまくいきます。CA側では変更できないと思います。

他のヒント

これは実際には答えではありませんが、ウィンドウのサイズを変更するためにドラッグしている間は何かをアニメーション化しないことをお勧めします。画面はすでにアニメーション化されています (ウィンドウの移動により)。さらにアニメーションを追加すると、視覚的に混乱し、無関係になる可能性があります。

CoreAnimation エフェクトは、既知の状態から別の状態に移動する場合に最適です。たとえば、新しいペインの内容に合わせて環境設定ウィンドウのサイズを変更するときに、古いサイズと新しいサイズの両方がわかっている場合や、オブジェクトをフェードインまたはフェードアウトする場合などです。 (または両方)。ウィンドウのサイズ変更中にアニメーションを実行すると、視覚的にわかりにくくなり、ユーザーはウィンドウのサイズを希望の位置に合わせることに集中することが難しくなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top