我正在尝试创建可以通过手指绘制形状/路径的草图应用程序。
到目前为止我所做的是在触摸开始时创建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是完整的画布大小时(即触摸结束时)才在数组中渲染路径。 但这会绘制奇怪的形状线,并且当阵列中有许多对象时也会变慢。
我不知道如何解决这个问题并需要一些帮助。
谢谢!