【问题标题】:Preserve CAShapeLayer's lineWidth in a zoomable UIView在可缩放的 UIView 中保留 CAShapeLayer 的 lineWidth
【发布时间】: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


【解决方案1】:

线宽需要除以缩放系数。默认线宽为1。

因此,创建相同的属性,当您通过手势应用缩放时将其分开。

即缩放 = 4.0 然后线宽 = 1.0/4.0

和如果缩放是 2 然后是 1.0/2.0 一样

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    相关资源
    最近更新 更多