31歳から始める初心者のアプリ制作勉強ブログ

アプリ制作の勉強の経過や雑記などを書いていきます

pinchgestureの最大、最小倍率の設定

PinchGestureの最大、最小の倍率を決めるプロパティが無い!

ジェスチャーイベントを作っていてふと際限無く大きくなったり小さくなったりする

拡大縮小が気になって調べて見ました、が出てくるのはUIScrollViewの倍率設定ばかり・・・なので自分で考えて見ました。

 拡大縮小ってどういう動きしてんの?

f:id:inou-social:20140206174820p:plain

 

たとえば簡単な動きで

UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizeralloc] initWithTarget:selfaction:@selector(pinch:)];

    pinchGesture.delegate = self;

 

    [ self.view addGestureRecognizer : pinchGesture];

として宣言して

 

- (void) pinch: (UIPinchGestureRecognizer *) sender

{

_targetView.transform = CGAffineTransformMakeScale(sender.scale , sender.scale);

 

 

}

 

とします。原理としてはUIGestureのプロパティでsenderから拡大率が取れるので

sender.scaleでタッチして指を広げたり閉じたりした分をトランスフォームで反映させているわけです。

 

しかし倍率設定を書いていないのでこのままでは無限に大きくなってしまいます。

UIPinchGestureRecognizerのプロパティを探しても大きさと早さを取得するもの

ぐらいで使えそうなものはありませんでした。

 

・自分で決めてしまおう

なので強引に自分で決めてしまう事にしました。

トランスフォームを反映させるコードの前にこうやって書きました。

 if (sender.scale <= 0.5 ) {

        sender.scale = 0.5;

    } else if (sender.scale >= 2.0) {

        sender.scale = 2.0;

 

    }

 

要約すると、もし倍率が0.5より下でもそれは0.5っていう事にしましょう。

そしてもし倍率が2倍以上ならそれは2倍っていう事にしましょう。

 

こう書いたらすんなり最大最小倍率が設定できました。

ネットで検索しても全然出てこなかったので青ざめていたのですが

プロパティがなくても案外すんなりできて驚きでした。