1

私はiPhone用の科学的視覚化アプリをやっています。UIView サブクラスは、オーバーライドされた drawRect: メソッドを介してレンダリングする必要があるデータをネットワークから定期的に受け取ります。

私の課題は、UIView の境界の変更を除いて無視される [myView setNeedsDisplay] 以外に、このデータが到着した (または変更された) ことを Cocoa-Touch に示す方法がないことです。非表示と非表示を試しました。ヌッシン。

気が狂ったことに、私がしたことは、UIView [myView setNeedsDisplay] の内部状態を変更することだけだったからです。この変更は Cocoa-Touch にはまったく見えません。この変更は、Cocoa-Touch によると、再描画を保証する基準の 1 つではありません。したがって、私の UIView は変更されずにそこに置かれます。

これは非常に、非常に、非常にイライラします。ここで壁にぶち当たりました。

誰かが私の UIView を再レンダリングするように促すテクニック、トリック、ハックを提案してください。

乾杯、ダグ

4

1 に答える 1

5

[myView setNeedsDisplay]次に実行ループに戻って表示されたときdrawRect:に送信されるようにする必要があります。境界を変更するとビューが再描画される場合 ( is )、境界の変更によって再描画が通知されるため、機能している必要があります。詳細については、UIView クラスのリファレンスを参照してください。myViewmyViewmyView.contentModeUIViewContentModeRedrawsetNeedsDisplay

drawRect:ビューが最初に表示されたときに呼び出されていますか? そうでない場合は、スペルが間違っているか、サブクラスでオーバーライドされているか、間違ったオブジェクトでさえある可能性があります。

ビューは表示され、画面上に表示されていますか? 画面外だと描画されません。

制御はイベント ループに戻りますか? drawRect:アプリケーションがビジー状態の場合は呼び出されません。

于 2009-10-04T15:28:38.940 に答える