Ios 放大时,UIView上的自定义图形将被像素化

Ios 放大时,UIView上的自定义图形将被像素化,ios,core-graphics,Ios,Core Graphics,当我的UIView被放大时,我试图在移动的触摸上平滑地绘制线条时遇到了一些问题。问题是,在特定的缩放级别上,线条开始看起来非常像素化。 到目前为止,我的视图层次结构非常简单,因为这更像是概念证明。我有一个UIScrollView,我的UIView作为子视图,并且它被设置为缩放视图 我的drawRect:实现如下所示: CGContextRef context = UIGraphicsGetCurrentContext(); [self.layer renderInContext:context

当我的
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);
将层的内容转储到上下文中是一个重要的部分,因为我只是刷新包围最后三个接触点形成的路径的边界框(
\u previousPoint1
\u previousPoint2
\u 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];
}
我可以使用
CAShapeLayers
来绘制路径。然而,低性能是不可接受的

如果有人能给我指出正确的方法,我将不胜感激

谢谢

[self setContentScaleFactor:scale];
ScrollViewDiEndZooming:
delegate方法中使用此选项


希望这对您有所帮助

这似乎是一条正确的道路,但我遇到了一些问题:1。当我结束放大时,只绘制最后三个接触点形成的路径。其余部分丢失,就像层的内容没有转储到当前图形上下文2中一样。如果我在视图放大的情况下画图,屏幕在触摸移动时不再刷新,我只能看到我在触摸结束时画的东西(路径看起来不是像素化的,所以这是好东西!)你知道是什么导致了这种效果吗?你的最大缩放比例是多少?如果有关系,它是5,最小,如果比例>2.0设置[self-setContentScaleFactor:2.0]不是100%,而是更好。我也有同样的问题,你有没有想过?