2009-06-17 5 views
0

私はタッチに基づいて多くのグラフィックを操作するUIViewサブクラスを持っています。すべての[self setNeedsDisplay]の呼び出しはうまくいくようです。別のクラスのUIViewでsetNeedsDisplayを呼び出す

しかし、同じUIViewサブクラスインスタンスへのインスタンス変数ポインタを使用し、それを操作してから、別のUIViewクラスから[UIViewSubClass setNeedsDisplay]を呼び出して、DrawRectが呼び出されることはありません。 setNeedsDisplayを呼び出す場所に制限はありますか?

(ボタンは別のUIViewサブクラスでクリックされたときに、このメソッドが呼び出されるメソッドがのdrawRectと呼ばれるではなく、されている。)

-(IBAction)loadGrid2; 
{ 
    tempSoundArray = musicGridView1.soundArray; 
    [musicGridView1.soundArray setButtonArrayToNull]; 
    [musicGridView1 setNeedsDisplay]; 
    musicGridView1.soundArray = tempSoundArray; 
    NSLog(@"loadGrid2 was called"); 
} 

答えて

1

のdrawRect:それは理にかなっている場合にのみ呼び出されます。すなわち、ビューは可視で、画面上で、汚れていなければならない。あなたのdrawRect:はいつでもと呼ばれていますか?ビューが最初に画面に表示されるときに呼び出される必要があります。

1

ベンに追加する: これはおそらく他の場所で問題があることを意味します。あなたのポインタがnilでないか無効であるか、ビューが階層に適切に追加されない可能性があります。

このタイプの動作をビュー内でなく代わりにビューコントローラで処理することを検討することをお勧めします。ビヘイビアを制御し、ビューコントローラにプレゼンテーションステートを保存し、ビュークラスをサブクラス化しない。それは、より少ない "ポインタ渡し"でコードを単純化します。これにより、この種の問題のデバッグも容易になります。

ビューコントローラが膨れていると感じる場合は、複数のビューコントローラ間で責任を分けることを検討してください。

関連する問題