2

初めて SetNeedsDisplayInRect を呼び出したときに IOS5 で気付きました。これにより、デバイスが全画面表示を更新します。これは以前の IOS バージョンとは異なります。

私が取り組んでいるアプリには、描画する必要があるオブジェクトの配列があります (ほとんどの場合、線のサイズが異なる四角形)。いくつかの四角形だけを再描画したい場合は、オブジェクトを "Update"-Array に追加し、SetNeedsDisplayInRect を呼び出して四角形の領域を無効にします。

drawRect-Method 内で、オブジェクトの完全な配列を描画するか、「Update-Array」のみを描画するかを次のように決定します。

BOOL boolDrawFullScreen = CGRectEqualToRect(rect, self.frame);

if (boolDrawFullScreen)
//draw all the objects
else
//draw just the objects within the update-array

IOS5でテストするまで、これは完全に機能しました。実際にはまだ機能しますが、SetNeedsDisplayInRect を呼び出すのは初めてではありません:--> CGRectEqualToRect は常に yes を返します。

何故ですか??私は何を間違っていますか?

どんな提案でも大歓迎です!! ありがとう

トム

4

1 に答える 1

2

この動作は、QA1708 Improving Image Drawing Performance on iOS に記載されています。

iPhone/iPod touch/iPad が画面を更新する方法のため、-setNeedsDisplayInRect: または -setNeedsDisplay: を呼び出すと、ビュー全体が再描画されることに注意してください。

したがって、画面の残りの部分とは独立して更新する必要がある画面サブ rect がある場合は、サブビューを使用する必要があるようです。

于 2012-03-09T01:13:40.223 に答える