0

我在尝试在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_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用于绘制路径的解决方法。然而,低性能是不可接受的。

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

谢谢。

4

1 回答 1

1
[self setContentScaleFactor:scale];

scrollViewDidEndZooming:委托方法中使用它

希望这对你有帮助

于 2013-01-17T11:16:00.590 回答