コアプロットを使用するココアインターフェイスがあります。インターフェイスのボタンを押すと、プロットが描画されます。プロットメソッドを複数回呼び出し、その間にsleep()を呼び出して、一連のグラフを作成したかったのです。しかし、データをリロードするための呼び出しが行われたとしても、関数が終了するまで何も起こらないようです(最後のグラフのみが表示されます)。CPAnimationが存在することはわかっていますが、使用を開始する前に、関数が終了するとグラフが更新されるのはどういうことかと思っていました。スリープを使用する代わりに、リフレッシュを処理するスレッドに譲る必要がありますか?
4 に答える
わかりました。方法はわかりました。別のスレッド (常に返される) のメソッドから reloadData メソッドを呼び出しました。これは、IBAction と NSTimer から reloadData を呼び出すことに要約されます。最後に、スリープを使用する代わりに、NSConditionLock を使用して処理とリフレッシュを調整します
おそらく、Core Plot(またはコード)はビューを表示が必要なものとして設定します。それはすぐには起こりません。イベントループに戻ったときに発生します。
sleep
Mac OS Xアプリケーションで使用するときはいつでも、子犬を殺します。代わりにNSTimerを使用してください。タイマーコールバックメソッドに1つのグラフに必要な作業を行わせ、メソッドに必要なインスタンス変数を設定して、描画するグラフを認識させます。これにより、メソッドは、グラフがなくなるまで各グラフを順番に描画します。
または、ユーザーにすべてのグラフをスライドショーとして表示させるのではなく、ユーザーが選択できるグラフのリストを表示することをお勧めします。(明示的にラベル付けされたスライドショーが実装しているものでない限り。)
Core Plot は、ほとんどの Cocoa 描画フレームワークと同様に遅延型です。実行ループの繰り返しの最後に描画します。これは、頻繁に描画されないようにするためです。
すぐに描画するのではなく、レイヤーは描画が必要としてマークされます。
他の人が指摘したように、スリープへのより良いアプローチは、NSTimer を使用して実行ループのブロックを回避するか、または performSelector:withObject:afterDelay のような NSObject メソッドを使用することです。
Peter の言うとおりです。reload data メソッドは実際には何も描画しません。プロットは表示が必要としてマークされ、次にレイヤーが画面に描画されるときに更新されます。を使用するsleep
と、描画する機会がなくなります。
また、Core Plot はかなり新しいプロジェクトであることにも注意してください。CPAnimation
関連するクラスはスタブです。彼らはまだ何もしていません。:-)