0

我有一个 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();

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

4

1 回答 1

0

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

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

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

于 2012-08-16T21:40:52.210 回答