我正在开发一个应用程序,在某些时候用户需要在图像上绘制一些东西。我编写的代码适用于周围1500x1500
和较小的图像,但是一旦图像变大,问题就开始了。
当图像变得太大时,绘制需要更多时间,并且手势识别器很少被调用。
我是这样做的:有两个类,一个是UIScrollView
名为的子类,一个是名为DrawView
的UIImageView
子类MyPen
。DrawView
有一个每次被识别时都会UIPanGestureRecognizer
发送消息(我得到并根据它开始或移动一行)。在其子视图中有两个 UIImageView 对象,一个用于背景图像,一个用于绘图(笔)。MyPen
[recognizer state]
DrawView
这是我在 MyPen 中所做的:
- (void)beginLine:(CGPoint) currentPoint
{
previousPoint = currentPoint;
}
- (void)moveLine:(CGPoint) currentPoint
{
self.image = [self drawLineFromPoint:previousPoint toPoint:currentPoint image:self.image];
previousPoint = currentPoint;
}
- (UIImage *)drawLineFromPoint:(CGPoint)fromPoint toPoint:(CGPoint)toPoint image:(UIImage *)image
{
CGSize screenSize = self.frame.size;
UIGraphicsBeginImageContext(screenSize);
CGContextRef currentContext = UIGraphicsGetCurrentContext();
[image drawInRect:CGRectMake(0, 0, screenSize.width, screenSize.height)];
CGContextSetLineCap(currentContext, kCGLineCapRound);
CGContextSetLineWidth(currentContext, _thickness);
CGContextSetStrokeColorWithColor(currentContext, _color);
CGContextBeginPath(currentContext);
CGContextMoveToPoint(currentContext, fromPoint.x, fromPoint.y);
CGContextAddLineToPoint(currentContext, toPoint.x, toPoint.y);
CGContextStrokePath(currentContext);
UIImage *ret = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return ret;
}
当图像足够大时,CoreGraphics 需要一些时间来渲染它,因此手势识别器不会经常被识别,并且向笔发送的点更少。
这里的问题是:有没有办法优化绘图?我应该为 ir 使用另一个线程吗?还有其他方法吗?非常感谢任何帮助。