gesture tips

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

Upload: keietsu-yasuhara

Post on 15-Jul-2015

113 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Gesture tips

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

Tips

KyasuSoft

Page 2: Gesture tips

自己紹介

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

Twitter @kyasusoft、 Facebook

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

Page 3: Gesture tips

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

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

3

Page 4: Gesture tips

何が問題かというと…

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

こっちに動いちゃう!

アファイン変換

Page 5: Gesture tips

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

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

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

5

frameの移動

アファイン変換

Page 6: Gesture tips

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

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

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

viewを移動したら、

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

Page 7: Gesture tips

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

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

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

7

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

Page 8: Gesture tips

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

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

8

Page 9: Gesture tips

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

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

9

Page 10: Gesture tips

おわり