gesture tips
TRANSCRIPT
移動・回転・拡大縮小 ジェスチャーの同時適用
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
おわり