2010-04-21 2 views
3

Как нарисовать гладкую линию с движением пальца/касанием на iPhone? У меня есть следующий код, но он не является гладким. Например, он делает углы/повороты, когда я пытаюсь сделать круг. Я думаю, что мне нужно использовать OpenGL. Есть идеи? образец кода? учебники?Нарисуйте гладкую линию с касанием пальцем на iPhone

Спасибо!

UIGraphicsBeginImageContext(self.view.frame.size); 
[drawImage.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; 
CGContextSetLineCap(UIGraphicsGetCurrentContext(), kCGLineCapRound); 
CGContextSetLineWidth(UIGraphicsGetCurrentContext(), 5.0); 
CGContextSetAllowsAntialiasing(UIGraphicsGetCurrentContext(), YES); 
CGContextSetRGBStrokeColor(UIGraphicsGetCurrentContext(), 1.0, 0.0, 0.0, 1.0); 
CGContextBeginPath(UIGraphicsGetCurrentContext()); 
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), lastPoint.x, lastPoint.y); 
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); 
CGContextStrokePath(UIGraphicsGetCurrentContext()); 
drawImage.image = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
+1

Я закончил с использованием Open GL и частицы. Хорошим примером для этого является пример кода Apple GLPaint. – Sharief

ответ

5

В итоге я использовал Open GL и частицу. Хорошим примером для этого является пример кода Apple GLPaint.

+0

Каков основной принцип в нем? –

1

Вам не нужен OpenGL. Просто держать ссылку на начальную точку и очистить контекст, в touchesMoved, и сделать что-то вдоль линий:

CGContextBeginPath(UIGraphicsGetCurrentContext()); 
CGContextMoveToPoint(UIGraphicsGetCurrentContext(), startPoint.x, startPoint.y); 
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), currentPoint.x, currentPoint.y); 
CGContextStrokePath(UIGraphicsGetCurrentContext()); 

Это сделает прямую линию от начальной точки до текущей точки.

+0

Этот код будет делать только прямую линию и не сможет сделать cricle, скажем так. – lugte098

+0

Предлагаю вам взглянуть ближе к некоторым функциям CGPath. Например, для круга вы можете использовать 'CGPathAddArc'. – shosti

+4

у вас отсутствует вопрос. В Cocoa-touch, когда вы пытаетесь проследить круг на экране, вы получаете события touchMoved, возможно, 8, 12 или, возможно, даже 20 точек по сенсорному пути пользователя. Таким образом, когда один соединяет точки, получается зубчатая 8-, 12- или 20-сторонняя фигура, а не красивый круг. Я считаю, что OP ищет способ сделать сглаживание кривой - возможно, с сплайнами или аналогичными. – Olie

3

Добавьте это в свой код, чтобы сгладить линии между точками

CGContextSetLineJoin(UIGraphicsGetCurrentContext(), kCGLineJoinRound); 

Это сделает огромную разницу

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