放大时,UIView上的自定义绘图会变得像素化

时间:2013-01-17 11:03:17

标签: ios core-graphics

当我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]; } 找到一种解决方法来绘制路径。但是,低性能是不可接受的。

如果有人能指出我正确的做法,我真的很感激。

感谢。

1 个答案:

答案 0 :(得分:1)

[self setContentScaleFactor:scale];

scrollViewDidEndZooming:委托方法

中使用此功能

希望这有助于你