在CA层上绘图

时间:2012-08-16 21:20:38

标签: ios xcode cocoa-touch drawing calayer

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

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

1 个答案:

答案 0 :(得分:0)

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

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

  • 使用此转换点绘制此UIBezierPath。