0

ImageView のサブレイヤーである CALayer があります。これは、ユーザーがサイズ変更/回転などを行うことができる画像を示しています。

ユーザーが 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 に答える