如何在iOS上编写草图应用程序
我正在尝试创建可以用手指绘制形状/路径的草图应用程序 到目前为止,我所做的是在触摸开始时创建UIBezierPath,并在手指移动时绘制路径 -(无效)触摸移动:(NSSet*)触摸事件:(UIEvent*)事件 { } 触摸完成后,将其保存到UIBezierPath数组中如何在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
-(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];