問題タブ [nsprogressindicator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - NSMenuItem の NSProgressIndicator が 2 番目のディスプレイで更新されない
(メニュー バー アプリケーション)に がNSMenu
添付されています。NSStatusItem
ファイルのダウンロード中に、このメニューの項目に NSProgressIndicator を表示したいと考えています。NSViewController
次のプロパティを使用して、この進行状況インジケーターのサブクラスを作成しました。
必要に応じて、次のコードを使用してファイルのダウンロードを開始します。このコードは で実行されNSRunLoopCommonModes
、 が表示されたときにデリゲート メソッドも呼び出されるようにしNSMenu
ます (これは で実行されますNSEventTrackingRunLoopMode
)。
didReceiveData
デリゲート メソッドで、サブクラスのプロパティを設定しますNSViewController
。
これは、プロパティをラベルにバインドするとうまく機能しますが、接続が開始される前NSProgressIndicator
にメニューを開いた場合にのみ更新され、ダウンロードが完了するまで再度閉じないでください。しかし、後で開くと、進行状況インジケーターが更新されません。メニューを開いた時点でのプロパティの値が表示されますが、この値は更新されません。進行状況インジケーターもアニメーション化されません。ラベルは機能することに注意してください...
setNeedsDisplay
値を変更するときに、カスタム ビューと進行状況インジケーターの両方で手動でwithYES
とom を呼び出そうとしましdisplay
たが、うまくいきません。[progress setHidden:YES]; [progress setHidden:NO];
進行状況インジケーターを修正する唯一の方法は、立て続けに呼び出すことですが、これは進行状況インジケーターがちらつきます。もちろん、これは悪い解決策です。
私は何を間違っていますか?どうすればこれを修正できますNSProgressIndicator
か?
objective-c - 非常に要求の厳しいアプリで UI を強制的に更新する
ここに私の問題があります:私は文字通り何百万もの計算をしなければならないアプリを持っています(これは科学論文が出版されるためのものです)。
したがって、計算を高速化するために、スレッドについて少し学び、次のことを行いました。
そして、Magic.m
私はこれがあるという名前のメソッドを持っていdefineListOfSameDonInparticule:
ます:
私が持っているこのコードでは[appDelegate increaseProgressionMeterByOne]
、アプリのデリゲートにメッセージを送信し、アプリのデリゲートがincrementBy:1をプログレスバーに送信します
しかし、すべてのスレッドが同時に発生する数百万の計算で使用されているため、UI がフリーズし、progressBar が先に進みません。
注意: 私の進行状況バーは、マルチスレッドを使用しないプログラムの他の部分で正常に動作します
UI を強制的に更新する方法はありますか? または、これを解決する方法について何か考えがありますか?
UI を更新するとアプリの速度が低下することはわかっていますが、アプリの対象者にとっては必要です。
どうもありがとう !
アップデート :
AppDelegate の UI を更新するコードは次のとおりです。
objective-c - NSCollectionView が大量のデータをバインドしている間に NSProgressIndicator をスピンさせることは可能ですか?
私はNSCollectionView
約1000個のアイテムをロードする必要があります(アイテムにはテキストのみが含まれ、画像やその他のリッチなものは含まれていません)。
UI が回転していることをユーザーに知らせるために UI を回転させたかったNSProgressIndicator
のですが、インジケーターが UI に表示され、まったく回転しないことがわかりました。実際、データのロード中に UI 全体がハングし、タスクがそのバインディング タスクのメイン スレッドの 100% を占有してNSCollectionView
いるように見えます。NSCollectionView
NSProgressIndicator
バインディング中にスピンすることは可能ですか?
編集:
NSArrayController をデータ ソースとして使用し、NSCollectionView のコンテンツを arrayController.arrangedObjects にバインドします。新しいアイテムが arrayController に追加されると、collectionView が自動的に更新されます。
バインド タスクをセカンダリ スレッドに配置すると、各アイテムが UI に 1 つずつ表示され、バインドするアイテムが約 1000 あるため、それぞれに約 0.5 秒かかることがわかります。タスクの完了には時間がかかりすぎます。 .
私が探しているのは、新しいアイテムを collectionView にバインドする場合、バインディングはメイン スレッドから実行され、progressIndicator がスムーズに回転し、ロード タスク全体が完了すると、collectionView が更新され、progressIndicator がなくなることです。