【问题标题】:Drawing on a CA Layer在 CA 层上绘图
【发布时间】:2012-08-16 21:20:38
【问题描述】:

我有一个 CALayer,它是 ImageView 的子层。这显示了一个图像,用户可以调整大小/旋转等。

我希望能够让用户使用 PanGesture 在图像顶部绘图(以擦除图像) - 如果图像是原始大小(用户没有尝试调整大小/旋转),这可以正常工作,但是作为一旦用户调整大小/旋转并再次尝试,他/她可以在图像上绘制的线将随图像缩放(即,如果用户将图像层的大小减半,则绘制线将减半,如果用户将图像层旋转 45 度,向上平移将绘制一条对角线)。

我目前正在尝试通过绘制然后使用新创建的 self.image2 设置 layer.contents 来做到这一点(image2Position 是该图层在屏幕上的当前位置):

  UIGraphicsBeginImageContextWithOptions(self.image2.size, NO, 0.0);
    [self.image2 drawInRect:CGRectMake(0, 0, self.image2.size.width, self.image2.size.height)];

    [eraser drawAtPoint:CGPointAdd2(CGPointAdd(currentPoint, CGPointMake(-center.x, -center.y)), CGPointMake(-self.image2Position.x, -self.image2Position.y)) blendMode:kCGBlendModeDestinationOut alpha:1];

    self.image2 = UIGraphicsGetImageFromCurrentImageContext();

无论用户如何旋转/调整图像大小,如何确保用户可以在相同的坐标系中绘制相同大小的线?

【问题讨论】:

    标签: ios xcode cocoa-touch drawing calayer


    【解决方案1】:

    计算图像的比例,例如。 0.5 并调整 lineWidth(我假设您使用 UIBezierPath,它比未优化的 CGPath 更快)。好的,这很容易。现在您需要转换您的 CALayer 并相应地旋转您的 UIBezierPath。由于尺寸等原因,这有点困难。

    • 使用 convertPoint:toLayer: 或 convertPoint:fromLayer: 检查点是否在 CALayer 内

    • 使用这个转换后的点来绘制这个 UIBezierPath。

    【讨论】:

    • 谢谢,convertPoint: toLayer 正是我所需要的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2015-06-23
    • 2011-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多