Как нарисовать рисунок круглой точки для CAShapeLayer?

Я пытаюсь обвести пути в CAShapeLayer штриховыми узорами. Я создал много шаблонов штрихов, используя свойство lineDashPattern. Но это свойство не дает никаких вариантов для типа штриха тире. Я хочу, чтобы мои тире были круглыми точками, как на изображении ниже:

введите здесь описание изображения

Я знаю, что этого можно достичь, потому что я видел это во многих приложениях. Но я не могу найти способ реализовать это в библиотеке CAShapeLayer. Итак, я хочу знать, как получить эти круглые точки?


person blancos    schedule 22.11.2014    source источник


Ответы (3)


Все, что вам нужно сделать, это установить kCALineCapRound для свойства lineCap вашего CAShapeLayer, а затем установить свой lineDashPattern на [0.0, x ], где, например, x равно 2 * ширине линии вашего CAShapelayer, если вы хотите, чтобы поле между точками было таким же длинным, как диаметр ваших точек.

Значение 0,0 для первого нарисованного сегмента в lineDashPattern существует потому, что kCALineCapRound рисует полукруг впереди и позади вашего окрашенный сегмент, и любой окрашенный сегмент больше нуля приведет к тому, что точка станет таблеткой.введите здесь описание изображения

person Nein Danke    schedule 08.04.2015
comment
Даже если я поставлю x = 2 * linewitdh, это даст мне таблетки - person Zell B.; 03.07.2015
comment
X не имеет ничего общего с формой точки, он определяет границу между точками (незакрашенный сегмент). Ноль в примере — это то, что образует точка, если нарисованный сегмент больше нуля, это дает вам таблетку. - person Nein Danke; 04.07.2015

попробуй //быстро

layer.strokeColor = UIColor.whiteColor().CGColor
layer.fillColor = UIColor.clearColor().CGColor
layer.lineWidth = 4
layer.lineDashPattern = [0.01, layer.lineWidth * 2]
layer.lineCap = kCALineCapRound
person Alex    schedule 26.06.2016

Попробуйте приведенный ниже фрагмент

shapeLayer.lineDashPattern = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2 * stroke.width()], nil];
shapeLayer.lineCap = kCALineCapRound;
person prabu raj    schedule 08.10.2015