前回、こちらで質問をさせていただき、
UIImageViewをUIScrollViewに入れることで、画像の拡大・縮小・移動が可能になりました。
しかし、ImageViewをシングルタップした時にタップしたポイントを取得する部分のコードがうまく動かなくなってしまいました。
(以下のコードのprint(pointX)及びprint(pointY)が出力されません。)
以下がViewController.swiftファイルの内容です。
ViewController.swift
1import UIKit 2 3class ViewController: UIViewController,UIScrollViewDelegate { 4 @IBOutlet weak var myScrollView: UIScrollView! 5 @IBOutlet weak var myImageView: UIImageView! 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 10 // スクロールビューの設定 11 self.myScrollView.delegate = self 12 self.myScrollView.minimumZoomScale = 1 13 self.myScrollView.maximumZoomScale = 8 14 self.myScrollView.scrollEnabled = true 15 self.myScrollView.showsHorizontalScrollIndicator = true 16 self.myScrollView.showsVerticalScrollIndicator = true 17 18 var doubleTapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action:"doubleTap:") 19 doubleTapGesture.numberOfTapsRequired = 2 20 self.myImageView.userInteractionEnabled = true 21 self.myImageView.addGestureRecognizer(doubleTapGesture) 22 } 23 24 override func didReceiveMemoryWarning() { 25 super.didReceiveMemoryWarning() 26 // Dispose of any resources that can be recreated. 27 } 28 29 // ピンチイン・ピンチアウト 30 func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? { 31 print("pinch") 32 return self.myImageView 33 } 34 35 // ダブルタップ 36 func doubleTap(gesture: UITapGestureRecognizer) -> Void { 37 38 print(self.myScrollView.zoomScale) 39 if ( self.myScrollView.zoomScale < self.myScrollView.maximumZoomScale ) { 40 var newScale:CGFloat = self.myScrollView.zoomScale * 3 41 var zoomRect:CGRect = self.zoomRectForScale(newScale, center: gesture.locationInView(gesture.view)) 42 self.myScrollView.zoomToRect(zoomRect, animated: true) 43 } else { 44 self.myScrollView.setZoomScale(1.0, animated: true) 45 } 46 } 47 48 // 領域 49 func zoomRectForScale(scale:CGFloat, center: CGPoint) -> CGRect{ 50 var zoomRect: CGRect = CGRect() 51 zoomRect.size.height = self.myScrollView.frame.size.height / scale 52 zoomRect.size.width = self.myScrollView.frame.size.width / scale 53 54 zoomRect.origin.x = center.x - zoomRect.size.width / 2.0 55 zoomRect.origin.y = center.y - zoomRect.size.height / 2.0 56 57 return zoomRect 58 } 59 60 override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 61 for touch: AnyObject in touches { 62 let point = touch.locationInView(self.view) 63 64 let pointX = point.x 65 let pointY = point.y 66 67 print(pointX) 68 print(pointY) 69 } 70 } 71}
色々と調べてみたところ、UIScrollViewを用いた際にUIPinchGestureRecognizerが優先され(?)、
それが原因でシングルタップ・ダブルタップが認識できなくなるのではないかと思ったのですが、
どのように処理すべきでしょうか?
Xcode7.2、Swift2.1、Storyboardを使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/19 17:34
2015/12/20 01:17