私は持っている:
- カスタム ビュー (セカンダリ スレッドでテキストをスクロールする) を持つ NSStatusItem。セカンダリ スレッドは内部状態を更新し、setNeedsDisplay でメイン スレッドに通知します。
- mouseDown で、NSMenu がポップアップします。
- ただし、NSMenu のいずれかの NSMenuItem が選択されている場合、または 2 回目の mouseDown が検出されて NSMenu がフェードすると、テキストのスクロール アニメーションが途切れます。
アニメーションの実行中に NSMenu のデフォルト ビューがメイン スレッドをブロックしているように見えます。ビュー (メイン スレッド) の drawRect: に対してセカンダリ スレッド出力 time_since_last_loop を使用してこれをテストしましたが、drawRect だけがスタッターを示しています。カスタム ビューの drawRect は、数フレームで ~30 fps から 5 に低下します。
NSMenu アニメーションをブロックしないようにする方法、またはカスタム ビューの drawRect と同時に行う方法はありますか?