【发布时间】:2015-04-09 15:39:30
【问题描述】:
使用 CGContext,以画线段开始绘制虚线很容易:
using (var ctx = UIGraphics.GetCurrentContext())
{
ctx.BeginPath();
//... draw a path here
var pattern = new float[] { 2, 2 };
ctx.SetLineDash(0, pattern);
ctx.DrawPath(CGPathDrawingMode.Stroke);
}
这会画出一条看起来像“xx--xx--xx--xx--”的线,其中“x”表示已绘制,“-”表示未绘制。
现在我想画一条以未绘制线段开头的线,即:“--xx--xx--xx--xx”。有没有一种优雅的方法来实现这一目标?例如。通过告诉 iOS 从未绘制的段开始?
在我们的示例中,可以使用相位参数来实现以未绘制线段开头的线:
using (var ctx = UIGraphics.GetCurrentContext())
{
ctx.BeginPath();
//... draw a path here
var pattern = new float[] { 2, 2 };
ctx.SetLineDash(2, pattern);
ctx.DrawPath(CGPathDrawingMode.Stroke);
}
但是,对于更复杂的模式(例如{ 2, 4, 3, 7, 5, 6 }),使用相位参数变得更加麻烦。除了相位参数之外,模式可能还需要移动。
总结一下:是否可以在不使用相位参数的情况下优雅地创建以未绘制线段开头的虚线?
注意:代码示例是用 C# (MonoTouch) 编写的,但问题也适用于原生 iOS 代码。
【问题讨论】:
-
一种笨拙的解决方法可能是用所需颜色绘制一条实线,然后在其顶部绘制一条白色虚线(或背景色)。
-
@user2320861 谢谢,如果背景颜色已知,该建议应该可以正常工作。就我而言,我需要能够在不同的背景(甚至图像等)上画线。所以我真的需要未上漆的段,而不是“上漆”的段。
标签: ios xamarin.ios uikit core-graphics