Нарисуйте пунктирные линии с помощью Quartz на iPhone

Я разрабатываю приложение, в котором мне нужно провести пунктирную линию между парой точек. Я пытался

CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound)
CGContextSetLineDash(UIGraphicsGetCurrentContext(), 0, lengths, LENGTH_OF_ARRAY)

Но вместо пунктирных линий я вижу пунктирные линии. Как вместо этого получить пунктирные линии?


person kayvee    schedule 28.06.2010    source источник
comment
developer.apple.com/library/ios / # documentation / GraphicsImaging /   -  person Jay    schedule 28.06.2010
comment
Это старый пост, но приведенный выше комментарий на самом деле не помогает. Эта ссылка не касается рисования точек.   -  person Daniel Farrell    schedule 20.07.2012
comment
Конечно, есть. Есть целый раздел «Рисование пути», в котором описывается, как нарисовать штриховой штриховой узор с помощью CGContextSetLineDash developer.apple.com/library/ios/#documentation/GraphicsImaging/   -  person pinkeerach    schedule 13.03.2013


Ответы (2)


CGContextRef context = UIGraphicsGetCurrentContext();
CGFloat lengths[2];
lengths[0] = 0;
lengths[1] = dotRadius * 2;
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineWidth(context, dotRadius);
CGContextSetLineDash(context, 0.0f, lengths, 2);

// CGContextAddEllipseInRect(context, self.bounds);

Этот код должен работать правильно.

person Dennis Pashkov    schedule 09.08.2012

Пожалуйста, посмотрите следующую замечательную страницу о ролях свойств линии! https://horseshoe7.wordpress.com/2014/07/16/core-graphics-line-drawing-explained/

Согласно приведенной выше странице, вот код для "точечной" линии, например (...)

// should
CGContextSetLineCap(context, kCGLineCapRound);

// please see the role of line properties why the first should be 0 and the second should be the doulbe of the given line width
CGFloat dash[] = {0, lineWidth*2};

// the second value (0) means the span between sets of dot patterns defined by dash array
CGContextSetLineDash(context, 0, dash, 2);
person alones    schedule 01.09.2016