0

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

到目前为止,我所做的是在触摸开始时创建 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]; 

并且仅当矩形大小为完整画布大小(即触摸结束时)时才在数组中渲染路径。但这会画出奇怪的形状线,并且当数组中有很多对象时也会变慢。

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

谢谢!

4

0 回答 0