Freigeben über


CGPathDrawingMode Enumeration

Definition

Zeichnungsmodus.

public enum CGPathDrawingMode
type CGPathDrawingMode = 
Vererbung
CGPathDrawingMode

Felder

EOFill 1

Füllt den Pfad mithilfe der geraden Regel aus.

EOFillStroke 4

Füllt den Pfad aus und stricht den Pfad mithilfe der geraden Regel.

Fill 0

Füllt den Pfad mit der Wicklungsregel ungleich 0 (null) aus.

FillStroke 3

Füllt den Pfad aus und stricht den Pfad mithilfe der Wicklungsregel ungleich Null.

Stroke 2

Stricht den Pfad.

Hinweise

Mit dieser Enumeration kann der Anwendungsentwickler wählen, ob die Füllung, der Strich oder beides eines Pfads angezeigt wird. Darüber hinaus kann der Entwickler auswählen, ob der Füllmodus "Füllregel ungleich Null" oder der Füllmodus "Gerade-ungerade Regel" verwendet werden soll.

Sowohl die "Ungleich-Null-Wicklungsregel" als auch die "gerade-ungerade Regel" entscheiden, ob ein Pixel ausgefüllt werden soll, indem eine Linie betrachtet wird, die vom Punkt nach außerhalb des Pfads gezeichnet wird.

Der Modus "Wicklungsregel ungleich Null" füllt das Pixel nicht aus, wenn der Pfad diese Linie im Uhrzeigersinn und gegen den Uhrzeigersinn gleich oft durchquert. Wenn die Anzahl von Kreuzungen im Uhrzeigersinn und gegen den Uhrzeigersinn ungleich 0 (null) ist, wird der Punkt innerhalb des Pfads betrachtet und gefüllt. Wie die folgende Abbildung zeigt, ist die Pfadrichtung ein wichtiger Aspekt.

Die Regel "gerade/ungerade" füllt ein Pixel aus, wenn die Anzahl der gekreuzten Pfade ungerade ist. Die Richtung des Pfads wird nicht berücksichtigt.

Das folgende Beispiel zeigt eine komplexere Situation. Der obere Pfad wird mit der "Gerade-Ungerade-Regel" (EOFillStroke) gezeichnet, während der untere mit der "Ungleich-Null-Wicklungsregel" (FillStroke) gefüllt ist. In beiden Fällen wird der Pfad rot gezeichnet und grün ausgefüllt.

 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);
}         

Gilt für: