我正在尝试创建可以通过手指绘制形状/路径的草图应用程序。
到目前为止,我所做的是在触摸开始时创建 UIBezierPath,并在手指移动时绘制路径。
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
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: 方法限制要渲染的区域。
[self.drawingView setNeedsDisplayInRect:rectToUpdateDraw];
并且仅当矩形大小为完整画布大小(即触摸结束时)时才在数组中渲染路径。但这会画出奇怪的形状线,并且当数组中有很多对象时也会变慢。
我不知道如何解决这个问题,需要一些帮助。
谢谢!