問題タブ [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.

0 投票する
1 に答える
472 参照

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か?

0 投票する
2 に答える
753 参照

objective-c - 非常に要求の厳しいアプリで UI を強制的に更新する

ここに私の問題があります:私は文字通り何百万もの計算をしなければならないアプリを持っています(これは科学論文が出版されるためのものです)。

したがって、計算を高速化するために、スレッドについて少し学び、次のことを行いました。

そして、Magic.m私はこれがあるという名前のメソッドを持っていdefineListOfSameDonInparticule:ます:

私が持っているこのコードでは[appDelegate increaseProgressionMeterByOne]、アプリのデリゲートにメッセージを送信し、アプリのデリゲートがincrementBy:1をプログレスバーに送信します

しかし、すべてのスレッドが同時に発生する数百万の計算で使用されているため、UI がフリーズし、progressBar が先に進みません。

注意: 私の進行状況バーは、マルチスレッドを使用しないプログラムの他の部分で正常に動作します

UI を強制的に更新する方法はありますか? または、これを解決する方法について何か考えがありますか?

UI を更新するとアプリの速度が低下することはわかっていますが、アプリの対象者にとっては必要です。

どうもありがとう !

アップデート :

AppDelegate の UI を更新するコードは次のとおりです。

0 投票する
1 に答える
381 参照

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 がなくなることです。