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%,而是更好。我也有同样的问题,你有没有想过?