我想用兩種交替的顏色(例如黑色和白色,認爲Preview.app選擇框)描邊CAShapeLayer
的路徑。我不知道如何做到這一點,或者這是否甚至可以使用Quartz。如何用Cocoa中的兩種交替顏色描畫虛線CGPath?
我已經建立了一個CAShapeLayer以具有白色邊框,然後將路徑屬性設置爲黑色虛線。我的希望是,這應該會產生黑色和白色虛線的效果。然而,似乎該路徑被抽中的邊界被撫摸在上面,見截圖(皮毛屬於我的貓),
任何人都可以提出一個更好的方法或方式來獲得這工作?
的代碼,
// 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);
謝謝。所以在你看來,兩層實際上是唯一的選擇?我試圖遠離它,因爲它感覺像一個黑客! –
@boyfarrell兩層或自定義渲染。我會親自去兩層。我假設你在屏幕上只有少數幾個(如果不是隻有一個)選擇,所以不應該有任何性能影響,並且代碼不是太複雜,並且可以很好地封裝在它自己的類中(對於私有子層) –
是的,這是很好的建議,謝謝。我打算製作一個CAShapeLayer子類(稱爲'HostingShapeLayer'),它具有屬性foregroundLayer。此屬性將前景層添加爲託管圖層的子圖層。託管層還沿着邊界筆觸一條白色路徑。子層可以做到黑色的虛線。聽起來像合理的設計?或者你會去做其他事情? –