objective-c - 遅い - viewwilllayoutsubviews frame




同時にインターフェースビルダーを描画することができますか? (2)

私はiterfaceビルダーで言及されているオプションを同時に描画することはできませんでした。 下の画像を参照してください。

誰かが私にその用途と目的を説明できますか?


このオプションは、 NSProgressIndicatorなどのスレッド描画をサポートするビュー用NSProgressIndicator 。 Draw Concurrentlyをオンにすると、そのビューのバックグラウンドスレッドからdrawRectを呼び出すことができます。 NSViewクラスリファレンスを参照してください。
AppKitのビューのどれもこれをサポートしません(NSButtonとNSProgressIndicatorを除いて、しかし歴史的な理由のためにそれらは別々のAPIを持っています)。


あなたのNSViewサブクラス ' -drawRect: instanceメソッド二次スレッドから呼ばれるかもしれないことをAppKitに知らせるためにそれを使うことができます。

それは10.6 +です。 AppKitがビューを非同期的にレンダリングする場合は、 -drawRect:が並行ブロックを使用して実行され、 -drawRect:が2次スレッドから呼び出されます。 つまり、サブクラスの実装はスレッドセーフである必要があります(互換性のため、デフォルトでは無効になっています)。

詳細は-[NSView setCanDrawConcurrently:]も参照してください。実際にこの動作を有効にするために必要なことはほとんどないからです。 同様に、AppKitがスレッドセーフであること、またはそのNSViewサブクラスがこの機能をサポートするように設計されていることを意味するべきではありません - 重い描画のために設計されています





interface-builder