2009-05-04 7 views
16

clipsToBoundsプロパティがUIViewの場合、図面を境界線にクリップするか、またはsubViewsuperViewの範囲外に描画できないことがドキュメントに記載されています。UIView clipsToBoundsプロパティ:パフォーマンスが向上しますか?

いいですが、それは実際にはどういう意味ですか?

私はYESにいることを設定した場合は、その後、私のsubViewは自動的にのみsuperViewの境界の外側ではありませんそれらの部分を描画します。全体のパフォーマンスが向上するか、表示されないビュー、つまりUIScrollViewのビューを作成しないようにする必要がありますか?

答えて

23

私はそれが逆だと思います。クリッピングをオンにすると、クリッピングマスクを設定する必要があるため、クリッピングをオンにするとパフォーマンスが低下します。私はどこかでこれを読むことを漠然と覚えていますが、今はそれを見つけることができません。

+2

あなたは正しいと思います。簡単に言えば、OSはクリッピングを起こすために何かをしなければならないため、パフォーマンスが低下します。 – Kriem

+2

しかし、クリッピングそのものは、システムが境界外に描画したいメソッドを指示するようなものではありません。「ねえ、しないでください。時間を節約して、お茶を飲みましょう。 ! " – Thanks

+0

実際はそうです。背後では、OSはOpenGlのようなものをやっていて、何を描画するかを決める必要があります。決定にはCPUサイクルが必要です。 – Kriem

0

(可能な)パフォーマンスヒットは、ビュー階層が分かっている場合にのみ確定的です。上記のように、レンダラは通常、階層内の一部のビューがdrawRect:を使用していない限り、ビューを描画するためにGPUサイクルを使用します。このタイプのアプリではdrawRect:が省略されているため、OpenGL ESアプリケーションには影響しません。

私の理解から、クリップされた領域の決定と表示は、実際にはビュー全体を計算/描画/ブレンドするよりも少ないサイクルで済むかもしれません。 OpenGL ES 2.0現在、クリッピングはGPUで計算できます。

1

部分的にメインビューの外側にあるサブビューでは、clipsToBoundsの使用例が多くなります。たとえば、親(長方形)のUIViewの端に(円形の)サブビューがあります。 clipsToBoundsをYESに設定すると、サークル/サブビューの半分だけが表示されます。 NOに設定すると、サークル全体が表示されます。ちょうどこれを遭遇したので、共有したいと思った。

関連する問題