2009-08-04 5 views
0

私はコアプロットを使用するココアインターフェイスを持っています。インターフェイスのボタンを押すと、プロットが描画されます。私は、plottingメソッドを複数回呼び出し、その間にsleep()を呼び出すことで一連のグラフを作成したかったのです。しかし、データをリロードする呼び出しが行われても、関数が終了するまで何も起こらない(最後のグラフだけが表示される)ようにも見えます。今私はCPAnimationが存在することを知っていますが、それを使用する前に、関数を終了してグラフをリフレッシュさせるときに何が起こっているのか疑問に思っていました。私は睡眠を使用する代わりに爽やかな気遣うスレッドに降伏する必要がありますか?メソッドから戻ることなくコアプロットをリフレッシュする方法はありますか?

+0

追加されたコアプロットタグ:withObject:afterDelay

としては、他の人が指摘された、睡眠へのより良いアプローチは、実行ループを遮断回避するNSTimerを使用する、またはperformSelector等NSObjectの方法を使用することですあなたは別の質問でリクエストしました)。 – M4N

+0

thx mate!ありがとうございます。 –

+0

もう一度、コア・プロット・フレームワークへの貢献者は、スタック・オーバーフローではほとんどアクティブではありません。プロジェクトのメーリングリストであなたの質問に対するより良い回答が得られるかもしれません:http://groups.google.com/group/coreplot-discuss?hl=en –

答えて

3

わかりました。私はreloadDataメソッドを別のスレッドのメソッドから呼び出す(常に返す)。これは、IBActionからreloadDataを呼び出すことと、NSTimerを呼び出すことに気をつけました。最後に、スリープを使用する代わりに、NSConditionLockを使用して処理とリフレッシュを調整します。

2

おそらく、Core Plot(またはあなたのコード)がビューを必要な表示として設定します。それはすぐには起こりません。イベントループに戻ると起こります。

Mac OS Xアプリケーションでsleepを使用するたびに、子犬を殺します。代わりにNSTimerを使用してください。あなたのタイマーコールバックメソッドは、1つのグラフに必要な作業を行い、どのグラフを描画すべきかを知るためにメソッドに必要なインスタンス変数を設定します。

また、すべてのグラフをスライドショーとして見るのではなく、ユーザーが選択できるグラフのリストを提示する方が良いでしょう。 (明示的にラベル付けされたスライドショーが実装しているものでない限り)

0

Peterは正しいです。リロードデータメソッドは実際には何も描画しません。プロットは、レイヤーがスクリーンに描画されたときに、表示が必要なものとしてマークされ、リフレッシュされます。 sleepを使用すると、描画する機会は決してありません。

また、Core Plotはかなり若いプロジェクトです。 CPAnimationであり、関連するクラスはスタブです。彼らはまだ何もしていない。 :-)

+0

あなたはまだcpanimationがうまくいきませんか? –

+0

はい、正しいです。 –

+0

ああ、応答のおかげで、私はちょうど私が今すぐ必要なもののカスタムコードとその速さの少しで行くアニメーションを持っている間に、ありがとう。 –

2

コアプロットは、ほとんどのCocoaドローイングフレームワークと同様、実行ループの最後に描画されます。これは、物事があまりにも頻繁に描かれないようにするためです。

すぐに描画するのではなく、レイヤに必要な描画としてマークが付けられます。 (

関連する問題