我想用两种交替颜色(例如黑色和白色,想想Preview.app选择框)来描绘CAShapeLayer
的路径。我不知道如何做到这一点,或者是否可以使用Quartz。
我已将CAShapeLayer设置为具有白色边框,然后将path属性设置为黑色虚线。我希望这应该产生黑白虚线的效果。但是,似乎首先绘制路径,边框在顶部被描边,看截图(毛皮属于我的猫),
任何人都可以提出更好的方法或方法来实现这一目标吗?
代码,
// Stroke a white border
[shapeLayer setFrame:shapeRect];
[shapeLayer setBorderColor:[[NSColor whiteColor] CGColor]];
[shapeLayer setBorderWidth:1.0];
// Stroked a black dash path (along the border)
// and fill shape with clear colour
[shapeLayer setFillColor:[[NSColor clearColor] CGColor]];
[shapeLayer setStrokeColor:[[NSColor blackColor] CGColor]];
[shapeLayer setLineWidth:1.0];
[shapeLayer setLineJoin:kCALineJoinRound];
[shapeLayer setLineDashPattern:
[NSArray arrayWithObjects:[NSNumber numberWithInt:5],
[NSNumber numberWithInt:5],
nil]];
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, shapeLayer.bounds);
[shapeLayer setPath:path];
CGPathRelease(path);
答案 0 :(得分:2)
我认为这种方法存在两个问题(混合图层边框和形状笔划)
你可以通过插入strokeWidth的路径一半
来做一些关于#1的事情CGFloat halfWidth = 1.0/2.0;
CGPathAddRect(path, NULL, CGRectInset(shapeLayer.bounds, halfWidth, halfWidth));
然而,边框仍将被绘制在形状之上(至少我不知道如何更改顺序)。
我认为最简单的解决方案是必须在同一容器层中对图层进行整形。容器将用于更改框架,两个图层将用于绘图。
底层将具有白色笔划(无划线图案),顶层将具有黑色虚线笔划。由于两个形状都具有相同的路径,因此它看起来像黑色和白色的虚线图案。
这样做也适用于任何形状。
答案 1 :(得分:0)
您是否尝试使用lineDashPhase属性?使用它,你可以先用黑色显示虚线,稍后用相同路径显示白色变换颜色和lineDashPhase。