【发布时间】:2018-07-14 22:33:45
【问题描述】:
我有一个自定义 UIView,它有一个 UIImageView 作为它的子视图来显示图像和一个 CAShapeLayer 作为一个子层来绘制它。 UIView 是可缩放的,我使用 UIPinchGestureRecognizer 来放大和缩小视图。我可以使用 CGPathRef 在视图上绘制直线。问题是,当我捏缩放视图时,我绘制的线条也会缩放并变粗。如何放大视图,保持线条细?
缩放前(绿线是我画的):
当我放大时:
我想要的是,线条与我放大之前一样细。 我试图:
CGMutablePath path = CGPathCreateMutable();
//line drawing code here
//scale path to 1.0?
CGAffineTransform transform = CGAffineTransformMakeScale(1.0, 1.0);
CGPathRef transformedPath = CGPathCreateCopyByTransformingPath(path, &transform);
self.drawingLayer.path = transformedPath;
CGPathRelease(path);
CGPathRelease(transformedPath);
如何防止缩放时路径宽度变大?
【问题讨论】:
-
您需要将缩放系数与线宽相除,即缩放 = 4.0,然后线宽 = 1.0/4.0,与缩放为 2 然后 1.0/2.0 相同
-
你只是希望线宽不被缩放,还是整个图层内容不被缩放?
-
@PrashantTukadiya 成功了!非常感谢!很奇怪,因为我见过这样的解决方案,但它以前对我不起作用。
-
@clemens 只有线宽。我创建了一个属性来存储宽度并在捏手势识别器的方法中更改它:@PrashantTukadiya 建议的
self.lineWidth = self.lineWidth \ recognizer.scale;。默认情况下,lineWidth = 1.0f -
@VolodymyrDenysov 很高兴为您工作!也添加为答案,以便其他人可以从那里获得帮助
标签: ios objective-c uiview cashapelayer cgpath