つまり、
[self setNeedsDisplayInRect:rect];
が呼び出され、rect
再描画が必要な領域に対して非常に慎重に計算されますが、drawRect
コードがすべてを気にせずrect
描画しない場合でも、iOSシステムは描画速度を何らかの形で改善できますか?(またはおそらくほとんど改善しませんか?)この質問には、UIKit/CoreGraphicsに精通している人が必要になる可能性があります。
つまり、
[self setNeedsDisplayInRect:rect];
が呼び出され、rect
再描画が必要な領域に対して非常に慎重に計算されますが、drawRect
コードがすべてを気にせずrect
描画しない場合でも、iOSシステムは描画速度を何らかの形で改善できますか?(またはおそらくほとんど改善しませんか?)この質問には、UIKit/CoreGraphicsに精通している人が必要になる可能性があります。
答えが「はい」になる方法はいくつかあります。
drawRect:
後でそのコードに戻って最適化することができます。ご存知かもしれませんが、これを行うための非常に良い方法の1つは、可能であれば、長方形を使用して何を描くかを決定することです。現在それを行っていない場合でも、将来行う可能性があります。変更されたrectを指定すると、変更するものがはるかに少なくなります。setNeedsDisplayInRect:
送信できます。フレームがrectと交差するサブビュー—を呼び出す前。(そして、UIViewの実装はすでにこれを行っている可能性があります。テストする必要があります。)setNeedsDisplay:
super
drawRect:
実装が渡されたrectを無視し、ビュー全体を描画する場合、渡されたrectの最適化は無効になりますsetNeedsDisplayInRect:
。
「needsdisplay」rectはまっすぐに通過します。そこにあるのは、drawRect:
実装が不要な描画を無視するために使用することだけです。実装が入力されると、drawRect:
渡された四角形の外側の描画が意図的なものであるかどうかをシステムが判断できないため、すべての描画が実際に行われます(パフォーマンスへの影響を含みます)。
描画する内容と方法によっては、渡されたrectを少なくともある程度使用するように実装を制限することはそれほど難しくありません。描画するdrawRect:
すべてのものには、テキストのチャンクであろうとベジェパスであろうと、境界rectがあります。または画像または単にあなたがいくつかの色で塗りつぶしている長方形。テストで描画するために各ビットを囲みCGRectIntersectsRect()
ます-その方法でパスされた四角形に描画を完全に制限することはありませんが、少なくともその四角形に触れないものは描画する必要がないようにします。