2

NSWindowツールバー付きの標準があります。ツールバーの項目の 1 つがカスタム ビューです。具体的には、NSTextField. (より具体的には、これはタイマー アプリです。タイマーのコントロールとデジタル ディスプレイはすべてツールバー内にあり、その他のものはウィンドウのコンテンツ領域にあります。NSTextFieldデジタル ディスプレイです。)

stringValue通常、タイマーの ' ' プロパティを変更することで毎秒タイマーを更新するだけNSTextFieldです。これにより、タイマー自体が更新されます。しかし、ライブ ウィンドウのサイズ変更中に、' stringValue' プロパティを更新するコードが実行されていても (これは で確認しましたNSLog)、NSTextFieldウィンドウのサイズ変更が完了するまで、 は再び描画されません。その間、コンテンツ領域内のものは問題なく更新されています。

に自分自身を描画するように指示するために私が知っているすべての方法を試しましたNSTextFieldが、ライブのサイズ変更が完了するまでそれは起こりません。何か案は?明らかに、ツールバーがウィンドウの残りの部分と一緒にサイズ変更されるので、何らかの方法でそれが可能でなければなりませんsubviews。私はsubclassing 何かでこれを一緒にハックできると思っていますが、私のココアフは、そうするための最も簡単で適切な方法を見つけるのに十分なほど強力ではありません.

前もって感謝します...

編集:私は解決策を見つけました-それは素晴らしいことではありませんが、今のところほとんど機能します. 以下の私のコメントにあります。

4

1 に答える 1

1

-[NSWindow displayIfNeeded]ビューを表示が必要としてマークした後に呼び出すだけです。この問題は、Wine (OS X やその他の Unix ライクな OS で Windows ソフトウェアを実行するためのオープンソース プロジェクト) 用の Mac ドライバーを実装するときに発生しました。
http://source.winehq.org/source/dlls/winemac.drv/cocoa_window.m?v=wine-1.7.11#L1905

(これはLGPLのコードなので、コピーする前に検討したい。しかし、実装のテクニックはそこから学ぶことができます。)

于 2014-02-18T22:53:40.530 に答える