当我UIView
放大时,尝试在触摸时平滑地绘制线条时遇到一些问题。事情是线条在某些缩放级别开始看起来非常像素化。
我的视图层次结构现在非常简单,因为这更像是一个概念证明。我有一个UIScrollView
,我的UIView
作为一个孩子,它也被设置为缩放视图。
我的drawRect:
实现如下:
CGContextRef context = UIGraphicsGetCurrentContext();
[self.layer renderInContext:context];
CGPoint mid1 = midPoint(_previousPoint1, _previousPoint2);
CGPoint mid2 = midPoint(_currentPoint, _previousPoint1);
CGContextSetBlendMode(context, kCGBlendModeNormal);
CGContextMoveToPoint(context, mid1.x, mid1.y);
CGContextAddQuadCurveToPoint(context, _previousPoint1.x, _previousPoint1.y, mid2.x, mid2.y);
CGContextSetLineCap(context, kCGLineCapRound);
CGContextSetLineJoin(context, kCGLineJoinRound);
CGContextSetLineWidth(context, self.lineWidth);
CGContextSetStrokeColorWithColor(context, self.lineColor.CGColor);
CGContextStrokePath(context);
将图层的内容转储到上下文中是一个重要的部分,因为我只刷新包围最后三个触摸点(_previousPoint1
,_previousPoint2
和{{形成的路径的边界框。 1}})。
该操作实际上是在_currentPoint
方法上完成的,处理它的函数如下:
touchesMoved
我能够使用- (void)calculateMinImageArea:(CGPoint)pp1 :(CGPoint)pp2 :(CGPoint)cp
{
// calculate mid point
CGPoint mid1 = midPoint(pp1, pp2);
CGPoint mid2 = midPoint(cp, pp1);
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, mid1.x, mid1.y);
CGPathAddQuadCurveToPoint(path, NULL, pp1.x, pp1.y, mid2.x, mid2.y);
CGRect bounds = CGPathGetBoundingBox(path);
CGPathRelease(path);
CGRect drawBox = [self extendedRect:bounds];
UIGraphicsBeginImageContext(drawBox.size);
[self.layer renderInContext:UIGraphicsGetCurrentContext()];
UIGraphicsEndImageContext();
[self setNeedsDisplayInRect:drawBox];
}
找到一种解决方法来绘制路径。但是,低性能是不可接受的。
如果有人能指出我正确的做法,我真的很感激。
感谢。
答案 0 :(得分:1)
[self setContentScaleFactor:scale];
在scrollViewDidEndZooming:
委托方法
希望这有助于你