如何在iOS上编写草图应用程序

时间:2012-08-22 01:09:58

标签: ios drawing paint quartz-graphics quartz-2d

我正在尝试创建可以通过手指绘制形状/路径的草图应用程序。

到目前为止我所做的是在触摸开始时创建UIBezierPath,并在手指移动时绘制路径。

- (void)touchesMoved:(NSSet *)触及withEvent:(UIEvent *)事件 {

UITouch *mytouch=[[touches allObjects] objectAtIndex:0];
CGPoint locationInDrawRect = [mytouch locationInView:self.drawingView];
[self.drawingView.currentPath addLineToPoint:locationInDrawRect];
[self.drawingView setNeedsDisplay]; 

}

触摸完成后,将其保存到UIBezierPath数组中。

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.drawingView.pathsArray addObject:self.drawingView.currentPath];  //add latest current path to pathArray
    [self.drawingView clearCurrentPath];  //clear current path for next line
    [self.drawingView setNeedsDisplay];
}
在drawRect中,使用for循环

在数组中绘制当前路径和路径
- (void)drawRect:(CGRect)rect
{
        if(!self.currentPath.empty){
            [self.currentPath stroke];
        }

        for (UIBezierPath *path in self.pathsArray){
            [path stroke];
        }

}

这适用于几个路径对象,但当数组包含5个以上的路径时,它会变慢。

我尝试使用setNeedsDisplayInRect:method限制要渲染的区域。

[self.drawingView setNeedsDisplayInRect:rectToUpdateDraw]; 

仅当rect size是完整的画布大小时(即触摸结束时)才在数组中渲染路径。 但这会绘制奇怪的形状线,并且当阵列中有许多对象时也会变慢。

我不知道如何解决这个问题并需要一些帮助。

谢谢!

0 个答案:

没有答案