Gesture tips

Preview:

Citation preview

移動・回転・拡大縮小 ジェスチャーの同時適用

Tips

KyasuSoft

自己紹介

安原 啓悦(やすはら けいえつ)

Twitter @kyasusoft、 Facebook

iPhone・iPadアプリ作成、承りまっす

• gestureRecognizerを使って、画像の移動・回転・拡大縮小を同時に行います。

   移動:UIPanGestureRecognizer    回転:UIRotationGestureRecognizer  拡大縮小:UIPinchGestureRecognizer

3

何が問題かというと…

回転や拡大縮小のアファイン変換を適用すると • ドラッグの方向が合わなくなる • ドラッグの移動量が合わなくなる

こっちに動いちゃう!

アファイン変換

ポイント1• ジェスチャー自体は全部、viewにadd

• 移動はviewに適用 • 回転・拡大縮小はimageViewに適用

移動と、その他の適用対象を分離!

5

frameの移動

アファイン変換

ポイント2• 移動・回転・拡大縮小したら、viewのframeをimageViewのframeに合わせる

// imageViewも移動 _imageView.center = _baseView.center;

// viewの大きさを更新 _baseView.frame = _imageView.frame;

viewを移動したら、

imageViewを回転・拡大縮小したら、

ポイント3• アファイン変換を合成してimageViewに適用

// imageViewの現在のトランスフォームにローテーションを合成 CGAffineTransform tr1 = CGAffineTransformConcat(

         _currentTransform, CGAffineTransformMakeRotation(アングル)); // さらにスケールを合成 CGAffineTransform tr2 = CGAffineTransformConcat( tr1, CGAffineTransformMakeScale(スケール, スケール)); // imageViewに適用 _imageView.transform = tr2;

7

回転・縮小拡大を同時に適用します

ポイント4• 複数のジェスチャーを同時認識可能とする

// gesture delegate - (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { // 複数ジェスチャーの同時使用可とする return YES; }

8

説明を端折ったのでサンプルを見ていただくのが良いかと…

https://github.com/kyasusoft/DragTest.git

9

おわり

Recommended