次の方法で共有


CGPathDrawingMode 列挙型

定義

描画モード。

public enum CGPathDrawingMode
type CGPathDrawingMode = 
継承
CGPathDrawingMode

フィールド

EOFill 1

偶数奇数ルールを使用してパスを入力します。

EOFillStroke 4

偶数奇数ルールを使用してパスを塗りつぶし、ストロークします。

Fill 0

ゼロ以外の巻き取り規則を使用してパスを塗りつぶします。

FillStroke 3

ゼロ以外の巻き取り規則を使用してパスを塗りつぶし、ストロークします。

Stroke 2

パスをストロークします。

注釈

この列挙を使用すると、アプリケーション開発者はパスの塗りつぶし、ストローク、または両方を表示することを選択できます。 さらに、開発者は、コア グラフィックスのスタンディング "ゼロ以外の巻きルール" フィル モードと "偶数奇数ルール" フィル モードのどちらを使用するかを選択できます。

"ゼロ以外の巻き規則" と "偶数奇数ルール" の両方で、点からパスの外側に描画される線を考慮してピクセルを塗りつぶすかどうかを決定します。

パスが時計回りに交差し、反時計回りに等しい回数を超えると、"ゼロ以外の巻き規則" モードではピクセルが塗りつぶされません。 時計回りの交差と反時計回りの交差の数が 0 以外の場合、ポイントはパス内と見なされ、塗りつぶされます。 次の図に示すように、パスの方向が重要な考慮事項になります。

"偶数奇数" ルールは、交差するパスの数が奇数の場合にピクセルを塗りつぶします。 パスの方向は考慮されません。

次に示したのは、より複雑な状況の例です。 一番上のパスは "偶数奇数規則" () で描画され、下部には "ゼロ以外の巻き規則" (EOFillStrokeFillStroke) が塗りつぶされます。 どちらの場合も、パスは赤でストロークされ、緑で塗りつぶされます。

 public override void Draw (RectangleF rect)
{
	base.Draw (rect);

	using (var ctxt = UIGraphics.GetCurrentContext ()) {
		ctxt.ScaleCTM (1, -1);
		ctxt.TranslateCTM (0, -Bounds.Height);
   	DrawPathWithWindingMode (ctxt, Bounds.Height / 2, CGPathDrawingMode.EOFillStroke);
	  DrawPathWithWindingMode (ctxt, 0, CGPathDrawingMode.FillStroke);
		}
}

void DrawPathWithWindingMode (CGContext ctxt, float yOffset, CGPathDrawingMode mode)
{
	var points = new PointF[] {
		new PointF (50, 50),
		new PointF (200, 50),
		new PointF (200, 100),
		new PointF (50, 100),
		new PointF (50, 50),
		new PointF (150, 50),
		new PointF (150, 150),
		new PointF (100, 150),
		new PointF (100, 25)
	};
	points = points.Select (pt => new PointF(pt.X, pt.Y += yOffset)).ToArray();
	ctxt.SetStrokeColor (UIColor.Red.CGColor);
	ctxt.SetFillColor (UIColor.Green.CGColor);
	ctxt.MoveTo (points [0].X, points [0].Y);
	for (var i = 1; i < points.Length; i++) {
		ctxt.AddLineToPoint (points [i].X, points [i].Y);
	}
	ctxt.DrawPath (mode);
}         

適用対象