0

縦横比を維持せずにピンチして再スケーリングしたい画像ビューがあります。これを行うには、次のいずれかが実行可能であると考えました。

  1. 2 つのピンチ ジェスチャ レコグナイザーを使用します。1 つは水平方向に伸縮し、もう 1 つは垂直方向に伸縮します。
  2. 1 つのピンチ レコグナイザーを使用しますが、2 つの変換を順番に適用します。

これが私のピンチ処理関数です:

- (void) pinch:(UIPinchGestureRecognizer *)recognizer {
    static CGRect initialBounds;

    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
        initialBounds = imageView.bounds;
    }
    CGFloat factor = [(UIPinchGestureRecognizer *)recognizer scale];

    //scale horizontally
    CGAffineTransform zt = CGAffineTransformScale(CGAffineTransformIdentity, 
                                                     factor-(1.0-factor), 1.0);
    imageView.bounds = CGRectApplyAffineTransform(initialBounds, zt);

    //now scale vertically
    zt = CGAffineTransformScale(CGAffineTransformIdentity, 1.0, factor);
    imageView.bounds = CGRectApplyAffineTransform(initialBounds, zt);
    return;
}

何らかの理由で、変換は垂直方向にのみ行われています (最後のもの)。2 番目の CGRectApplyAffineTransform の最初のパラメーターを imageView.bounds に変更しようとしましたが、それでも機能しませんでした。

誰が私が間違っているのか教えてもらえますか?

また、2 つのピンチ ジェスチャ レコグナイザーを使用すると、同じことが起こります。実際に認識されるのはそのうちの 1 つだけです。

ありがとう!

4

1 に答える 1

0

2 つ目は CGAffineTransformIdentity から始まります。代わりに、zt を渡します。

于 2012-04-11T19:07:32.323 に答える