CGPathDrawingMode 列舉
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
繪圖模式。
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);
}