2010-02-12 2 views
12

Я читал через документацию, однако мне не сразу понятно, как рисовать полигон с помощью CGPath. Все, что мне нужно сделать, это сделать CGPath вокруг что-то вроде этого:Как нарисовать полигоны с CGPath?

__ 
\ \ 
\ \ 
    \__\ 

Может кто просьба представить отрывок о том, как это сделать?

Кроме того я полагаю CGPathContainsPoint поможет мне определить, если точка находится внутри такого пути ?, или же путь должен быть твердый рисунок

Кроме того, как я могу переместить cgpath вокруг? Это так же просто, как изменить что-то вроде источника, как в cgrect?

спасибо.

-Oscar

ответ

13

Вы должны сделать это так:

- (void)drawRect:(CGRect)rect { 

     CGContextRef context = UIGraphicsGetCurrentContext(); 

     CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor); 
     CGContextSetRGBFillColor(context, 0.0, 0.0, 1.0, 1.0); 

     // Draw them with a 2.0 stroke width so they are a bit more visible. 
     CGContextSetLineWidth(context, 2.0); 

     for(int idx = 0; idx < self.points.count; idx++) 
     { 

      point = [self.points objectAtIndex:idx];//Edited 
      if(idx == 0) 
      { 
       // move to the first point 
       CGContextMoveToPoint(context, point.x, point.y); 
      } 
      else 
      { 
       CGContextAddLineToPoint(context, point.x, point.y); 
      } 
     } 

     CGContextStrokePath(context); 
} 

Здесь следует отметить, что точки является массив точек, которые вы хотите сделать полигон для. Таким образом, это должен быть круговой путь, как: вы рисуете треугольник точек (x1, x2, x3), затем вы должны перейти в массив (x1, x2, x3, x1).

Надеюсь, это поможет.

+0

Вы не ссылаться на массив здесь, вы просто добавить одну точку несколько раз. –

+1

@David Я думал, что это было понятно –

+0

Спасибо, что помогли. –

2

Класс CS193P Stanford на iPhone имел проект HelloPoly, который может быть именно тем, что вы хотите - см. class home page для спецификации, а затем просмотреть видео о том, как он был реализован (и решения Google от людей, выполнивших задание).

5

См. Приложение Apple QuartzDemo. Он имеет код для этого, а также многие другие функции рисования кварца.

16

Это пример того, как создать треугольник с использованием CGPath, вам нужно только поставить точки.

var path = CGPathCreateMutable() 
CGPathMoveToPoint(path, nil, 0, 0) //start from here 
CGPathAddLineToPoint(path, nil, 20, 44) 
CGPathAddLineToPoint(path, nil, 40, 0) 
CGPathAddLineToPoint(path, nil, 0, 0) 

//and to use in SpriteKit, for example 

var tri = SKShapeNode(path: path) 
var color = NSColor.blueColor() 
tri.strokeColor = color 
tri.fillColor = color 

Это результат

Triangle with CGPath

+3

+1 для фактического использования CGPath, как и следовало. – Tim