3本指のピンチジェスチャーを作る 2

3点間の距離の求め方

3点間の距離の合計を求めるメソッドを作りましょう。
中学の時にならったアレです。

2点A(a,b),B(c,d)間の距離ABは
AB = √((c-a)の二乗 + (d-b)の二乗)

ってやつ
これを使って下記のようなメソッドを作成します。


//3点間の距離の合計を求める
- (float)calcDistance:(CGPoint)p1 p2:(CGPoint)p2 p3:(CGPoint)p3
{
    float distance = 0;

    float x;
    float y;

    x = fabs( p1.x - p2.x);
    y = fabs( p1.y - p2.y);
    distance += sqrt((x * x) + (y * y));

    x = fabs( p2.x - p3.x);
    y = fabs( p2.y - p3.y);
    distance += sqrt((x * x) + (y * y));

    x = fabs( p3.x - p1.x);
    y = fabs( p3.y - p1.y);
    distance += sqrt((x * x) + (y * y));

    return distance;
}

touchesBeganの実装

touchesBeganではジェスチャーの起動を判定する必要がありますが、
今回はタッチポイントが3点あるかどうかで判定します。

3点以外の時はstateにUIGestureRecognizerStateFailedを設定して、
ジェスチャーが失敗した事を通知します。


    //3本指の判定
    int numberOfTouches = event.allTouches.count;
    if (numberOfTouches != 3)

    {
        self.state = UIGestureRecognizerStateFailed;
        return;
    }

次にジェスチャー開始時点でのタップポイント間の距離を求めて保存します


    UITouch *first = [[event.allTouchesallObjects] objectAtIndex:0];
    UITouch *second = [[event.allTouchesallObjects] objectAtIndex:1];
    UITouch *third = [[event.allTouchesallObjects] objectAtIndex:2];

    _distance_initial = [self calcDistance:[first locationInView:self.view]
                        p2:[second locationInView:self.view]
                         p3:[third locationInView:self.view]];

    self.scale = 1;

※_distance_initialはインスタンス変数
scaleはプロパティです (例えば @property (nonatomic,assign) float scale; )

続きは次回

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です