CGPathDrawingMode 枚举

定义

绘图模式。

public enum CGPathDrawingMode
type CGPathDrawingMode = 
继承
CGPathDrawingMode

字段

EOFill 1

使用偶数规则填充路径。

EOFillStroke 4

使用偶数规则填充和笔划路径。

Fill 0

使用非零缠绕规则填充路径。

FillStroke 3

使用非零缠绕规则填充和笔划路径。

Stroke 2

笔划路径。

注解

此枚举允许应用程序开发人员选择显示填充、笔划或同时显示两个路径。 此外,它允许开发人员选择是使用核心图形站立“非零缠绕规则”填充模式还是使用“偶数规则”填充模式。

“非零绕组规则”和“偶数规则”都决定是否通过考虑从点到路径外部绘制的线条来填充像素。

如果路径顺时针和逆时针交叉该行的次数相等的次数,“非零绕组规则”模式不会填充像素。 如果顺时针交叉与逆时针交叉的计数为非零,则将该点视为路径内并填充。 如下图所示,这使路径方向成为一个重要考虑因素。

如果交叉的路径数为奇数,则“偶数”规则将填充像素。 它不考虑路径的方向。

以下示例演示了更复杂的情况。 顶部路径使用“偶数规则” () EOFillStroke 绘制,而底部则用“非零绕组规则” () FillStroke 填充。 在这两种情况下,路径都以红色和绿色填充。

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

适用于