3

だから、私は私のを表示する次のコードを持っていますNSWindow:

[_window makeKeyAndOrderFront:self]; 

[NSAnimationContext beginGrouping];
[[_window animator] setAlphaValue:1.0];
[[_window animator] setFrame:NSMakeRect([[NSApp currentEvent] window].frame.origin.x - 102, [[NSApp currentEvent] window].frame.origin.y - 238, _window.frame.size.width, _window.frame.size.height) display:YES];
[NSAnimationContext endGrouping];

このコードは、ユーザーがアプリのステータス バー アイコンをクリックした直後に呼び出されるため、 を使用し[[NSApp currentEvent] window].frame.origin.y/xてステータス バー アイコンの位置を取得します。
このコードは完全に実行されますが、時々、非常にラグが多く「ジャンピー」になり、その理由がわかりません。
これについてのアイデアとそれを修正する方法はありますか?

4

1 に答える 1

5

NSWindowアニメーターは を使用します。NSAnimationこれは、ウィンドウのフレームをアニメーション化するためにタイマーをすばやく起動することを意味します。アニメーションの各フレームで、ウィンドウ内のすべてのビューが再描画されます。やや複雑なビュー階層を持つ大きなビューがある場合、パフォーマンスは非常に悪く、実際に回避する方法はありません。

デフォルトのアニメーターの代わりにJNWAnimatableWindowをお勧めします。Core Animation を使用してアニメーションを実行するため、はるかにスムーズです。NSWindowCALayer

于 2013-02-03T09:13:51.080 に答える