2017-11-27 8 views
0

私は現在、by Rob's answer hereと同様の方法で角度勾配を描いています。 CGContextの拡張を追加して角度グラデーションを描画し、クリッピングパスを処理したいので、呼び出し元はfillPath(using:)のようなメソッドに似ています。クリッピングパスが適用された後にポイントがパス内にあるかどうかを確認するにはどうすればよいですか?

CGContextではfunc pathContains(CGPoint, mode: CGPathDrawingMode)、コンテキストから返されたCGPathではfunc contains(CGPoint, using: CGPathFillRule, transform: CGAffineTransform)を試してみました。

これらの両方がクリッピングパスを使用していないように見えるので、私の描画がクリッピング領域外に出ます。

パスがすでにクリップされているか、現在のクリッピングパスのコピーを取得する方法があるので、そのパスにもピクセルが含まれているかどうかを確認できますか?

答えて

0

ポイントがクリップされていないパスの中にあるかどうかを確認し、ポイントがクリッピングパスの内側にあるかどうかを確認する必要があります。クリッピングされたパスは、クリッピングパスとパスの交点であるため、クリップされたパスの内側にポイントがあり、クリップされていないパスとクリッピングパスの内側の両方にあります。

+0

私は理解していますが、CGContextからクリッピングパスを取得する方法はありません。 –

+0

クリッピングパスを設定していませんか?そうでない場合はビューの境界です。 –

+0

私はそれを設定していますが、ここで必要な場所とは異なるレベルに設定しています。それには、複数の塗りつぶしメソッドが同じクリッピングコードを使用することが含まれているなどの理由があります。たいていは、角度勾配を描くことはしませんが、単なる塗りつぶしであることがあります。 また、クリッピングパスのいくつかは複合オブジェクトなので、設定したときにクリッピングパスが何であるかはわかりません。 (私は1つのパスを設定してから別のパスを追加し、偶数/奇数ルールを使用してクリッピングするときにコンテキストが正しいことを処理します)。 –

関連する問題