指で図形/パスを描画できるスケッチ アプリを作成しようとしています。
これまでに行ったことは、タッチ開始時に UIBezierPath を作成し、指が動いている間にパスを描画することです。
-(void)touchesMoved:(NSSet *)touches 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: メソッドを使用してレンダリングする領域を制限しようとしました。
[self.drawingView setNeedsDisplayInRect:rectToUpdateDraw];
タッチが終了したときであるrectサイズがフルキャンバスサイズの場合にのみ、配列内のパスをレンダリングします。しかし、これは奇妙な形の線を描画し、配列に多くのオブジェクトがあると遅くなります。
この問題を解決する方法がわからず、助けが必要です。
ありがとうございました!