0

タッチに基づいて多くのグラフィックスを操作する UIView サブクラスがあります。[self 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");
}
4

2 に答える 2

1

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

このタイプの動作をビュー内では処理せず、代わりにビュー コントローラーで処理することを検討することをお勧めします。ビュー コントローラーで動作を制御し、プレゼンテーションの状態を保存し、ビュー クラスをサブクラス化しないでください。「ポインターの受け渡し」を減らしてコードを簡素化します。これにより、この種の問題のデバッグも容易になります。

ビュー コントローラーが肥大化していると感じた場合は、複数のビュー コントローラーに責任を分割することを検討してください。

于 2009-06-18T06:03:48.083 に答える
1

drawRect: 意味がある場合にのみ呼び出されます。つまり、ビューは表示され、画面上に表示され、汚れている必要があります。drawRect: は呼び出されたことがありますか? ビューが最初に画面に表示されたときにも呼び出す必要があります。

于 2009-06-17T23:07:20.833 に答える