2013-06-14 5 views
0

Я хочу, чтобы в основном сделать пунктирные значения, соответствующие значениям от 0 до 100. Я не хочу получать 10 разных изображений, представляющих разные 10-точечные приращения. Как мне это сделать?Как нарисовать круг линий

enter image description here

Что-то вроде этого

+0

Пробовал 'UIBezierPath'? – Undo

ответ

1

сделать пользовательский подкласс UIView.

Override drawRect.

В нем вы будете использовать эти функции:

  • UIGraphicsGetCurrentContext
  • CGContextBeginPath
  • некоторые линейные функции рисования
  • CGContextClosePath
  • CGContextDrawPath

Если посмотреть вверх по документация этих функций вы быстро найдете перекрестные ссылки на нужные вам функции.

4

В то время как я не дома в прошивке или Objective-C, концепция является универсальным.

Положение любой точки на круге можно охарактеризовать как sin(angle)*radius,cos(angle)*radius. Таким образом, вы можете нарисовать круг, как это самостоятельно, следуя этой концепции (в псевдокоде):

drawCircle(radius, borderWidth, dashDensity) 
{ 
    int numberOfDashes = radius/dashDensity); 
    float radsPerDash = pi * 2/numberOfDashes; 
    float innerRadius = radius - (borderWidth/2); 
    float outerRadius = radius + (borderWidth/2); 

    for(float angle = 0; angle < pi * 2; angle += radsPerDash) 
     DrawLine(sin(angle)*innerRadius, cos(angle)*innerRadius, 
       sin(angle)*outerRadius, cos(angle)*outerRadius); 
} 

Вы должны быть в состоянии получить его, чтобы посмотреть, как вы хотите здесь. Разумеется, вы также можете автоматически вычислить dashDensity с radius с использованием магической константы и использовать ширину линии, как вам кажется, подходящей для более толстых тире.

Для полукруга (например, 85% заполненных), изменить конечное состояние цикла:

for(float angle = 0; angle < (pi * 2 * 0.85); angle += radsPerDash) 
+0

Очень полезно. Однако я закончил работу с обычным безьером. Затем я устанавливаю цвет, узор линии (тире) и заливку для достижения этого эффекта –

1

Извините, скажите rtm здесь, но сделайте это. Создайте круг с CGPathCreateMutable и CGPathAddArc, затем используйте CGPathCreateCopyByDashingPath. Готово.

Смежные вопросы