5

ジェスチャ認識エンジンの現在の実装は次のとおりです。

- (IBAction)handleRotate:(UIRotationGestureRecognizer *)recognizer {

if([recognizer state] == UIGestureRecognizerStateEnded) {

    _lastRotation = 0.0;
    return;
}

CGFloat rotation = 0.0 - (_lastRotation - [recognizer rotation]);

CGAffineTransform currentTransform = self.container.transform;
CGAffineTransform newTransform = CGAffineTransformRotate(currentTransform,rotation);

[self.container setTransform:newTransform];

_lastRotation = [recognizer rotation];

}

正常に動作します。問題は、 self.container が常にその中心を中心に回転することです。2 つのタッチの中間点を中心に回転させたいので、ズームインしている場合は、タッチしている領域を中心に回転できます。どうすればいいですか?

4

2 に答える 2

0

回転するオブジェクトの境界の外側にポイントを設定できるかどうかはよくわかりませんが、コンテナレイヤープロパティを使用すると、変換からアンカーポイントを指定できます。

左上から右下に0.0〜1.0の値を受け入れます。

#import <QuartzCore/QuartzCore.h>

[[container layer] setAnchorPoint:myCGPoint];
于 2012-08-20T07:22:32.463 に答える
0

CGPointコードを使用して、任意の型変数に中心点を配置できます

recognizer.view.center = CGPoint(x,y);

詳細については、この例を参照してください。

(パンジェスチャーレコグナイザーの処理方法では、ビューの中心を設定する方法を示しています)

ハッピーコーディング:)

編集1

わかりました、最初に必要なことは、ビューのマルチタッチ プロパティを有効にすることです。(下の写真を参照)

XIB で有効化された multipal touch

次に、次のようにデリゲート メソッドを実装します。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSLog(@"Began %@",touches);
    NSUInteger touchCount = 0;
    for(UITouch *tu in touches)
    {
        CGPoint pt = [tu locationInView:self.view];
        NSLog(@"pt %f, %f",pt.x,pt.y);
        touchCount ++;
    }
    NSLog(@"touchCount %d",touchCount);
}

このメソッドは、 のタッチを示していNSLogます。self.view任意のビューを使用できるデモンストレーションにのみ使用します。

要件に応じてこのメソッドを変更し、以下の計算を使用して 2 点の座標を使用して中心点を取得します。

p3.x = (p1.x + p2.x)/2; p3.y = (p1.y + p2.y)/2;

ここで、p1、p2 は上記のデリゲート メソッドで取得した 2 つのタッチ ポイントであり、p3 は必要な中心点です。

ハッピーコーディング:)

于 2012-08-20T13:31:36.173 に答える