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

如何在iOS上编写草图应用程序,ios,drawing,paint,quartz-graphics,quartz-2d,Ios,Drawing,Paint,Quartz Graphics,Quartz 2d,我正在尝试创建可以用手指绘制形状/路径的草图应用程序 到目前为止,我所做的是在触摸开始时创建UIBezierPath,并在手指移动时绘制路径 -(无效)触摸移动:(NSSet*)触摸事件:(UIEvent*)事件 { } 触摸完成后,将其保存到UIBezierPath数组中 -(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { [self.drawingView.pathsArray addObject:sel

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

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

-(无效)触摸移动:(NSSet*)触摸事件:(UIEvent*)事件 {

}

触摸完成后,将其保存到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:方法限制要渲染的区域

[self.drawingView setNeedsDisplayInRect:rectToUpdateDraw]; 
并且仅当rect大小为完全画布大小时,即触摸结束时,才在数组中渲染路径。 但这会画出奇怪的形状线,当数组中有许多对象时,速度也会变慢

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


谢谢大家!

查看developers.apple.com上的GLView示例项目,尽管它使用的是OpenGL视图而不是bezier路径。如果您可以访问最新的WWDC会话,您应该查看会话506(优化2d图形和动画性能)。他们做的和你做的完全一样,并一步一步地优化。最大的问题是更新所有的行,并进行全屏重画。在iPad3上情况会更糟。你不可能在没有巨大延迟的情况下画出任何东西。您应该创建一个CGBitmapContext并将完成的像素数据存储在那里。然后只需绘制位图上下文和一个笔划。另外,请看Sebrassi提到的视频。danielbeard,Sebrassi,Borrden谢谢!谢谢你的帮助!
[self.drawingView setNeedsDisplayInRect:rectToUpdateDraw];