1

たくさんの線で構成された大きなスキームを描いています。のdrawRect:方法で行いUIViewます。スキームはビューのレイヤーよりも大きく、各線をチェックして、表示されている四角形と交差する場合にのみ描画します。でも、これをやるべきか?と一瞬思った。もしかしたら、Quartz はすでにこのテストを行っているのでしょうか?

質問は次のとおりです。関数を使用すると、この線がレイヤーの四角形と交差するかどうかCGContextAddLineToPoint()Core Graphicsテストされますか、それとも単に描画されますか?

4

1 に答える 1

0

関数を使用するCGContextAddLineToPoint()と、Core Graphics はこの線がレイヤー rect と交差するかどうかをテストしますか、それとも単に描画しますか?

linetoいいえ、それはサブパス内の 1 つのセグメントにすぎないため、抑制しません。線分の 1 つが交差していなくても、サブパスは rect と交差することがあります。サブパスごとに 1 行しか描画していない可能性がありますmovetoが、新しいサブパスを作成するまで、Quartz はそれを知りません。

四角形の線の交差をテストする必要があるかどうかについて、ドキュメントには次のように記載されています。

メソッドを実装するビューは、drawRect:メソッドに渡された四角形を常にチェックし、それを使用して描画操作の範囲を制限する必要があります。描画は比較的コストのかかる操作であるため、このように描画を制限することは、パフォーマンスを向上させる良い方法です。

これは、実際には、線が四角形と交差しているかどうかを確認し、そうでないものをスキップする必要があることを意味すると合理的に解釈できると思います。

于 2010-04-03T21:32:56.643 に答える