20220


UIScrollView内にUIImageViewを入れ，スクロール及びピンチによる拡大縮小が可能な状況で，  
UIImageViewに表示した画像をタップするとその座標値を取得したいのですが，  
unrecognized selector sent to instanceというエラーがコンソールに表示されて，うまくいきません．以下コードです．

[code]

    import UIKit
    class ViewController: UIViewController,UIScrollViewDelegate {
        @IBOutlet weak var myScrollView: UIScrollView!
        @IBOutlet weak var myImageView: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    
        // scrollview settings
        self.myScrollView.delegate = self
        self.myScrollView.minimumZoomScale = 1
        self.myScrollView.maximumZoomScale = 8
        self.myScrollView.scrollEnabled = true
        self.myScrollView.showsHorizontalScrollIndicator = true
        self.myScrollView.showsVerticalScrollIndicator = true
    
        let singleTapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self
            , action:"singleTap:")
        singleTapGesture.numberOfTapsRequired = 1
        self.myImageView.userInteractionEnabled = true
        self.myImageView.addGestureRecognizer(singleTapGesture)
    }
    
    // zoom
    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return self.myImageView
    }
    
    // singleTap
    func singleTap(gesture: UITapGestureRecognizer, touches: Set<UITouch>, withEvent event: UIEvent?) -> Void {
    
        for touch: AnyObject in touches {
            let point = touch.locationInView(self.view)
            let pointX = point.x
            let pointY = point.y
            print(pointX)
            print(pointY)
        }
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        }
    }
    
[/code]

func singleTapの部分を以下のようにしていた時はエラーがなかったので，引数や戻り値の部分に問題があるのではないかと思っております．

[code]

    func singleTap(gesture: UITapGestureRecognizer) -> Void {
        print("tapped")
    }
    
[/code]

様々なネット上のサンプルを見よう見まねで進めているため，全くおかしなコードを書いてしまっているかもしれませんが，教えていただけますと幸いです．


CC BY-SA 3.0
2015-12-20T12:12:13.997
20219
2015-12-20T12:42:53.827
12401
question
ios swift
ScrollView内にあるImageViewをタップした時の座標値を取得したい（Swift2.1）


> func singleTapの部分を以下のようにしていた時はエラーがなかったので，引数や戻り値の部分に問題があるのではないかと思っております．

はい、そのとおりです。`UIGestureRecognizer`が送るアクションメソッドは、引数に`UIGestureRecognizer`インスタンス自身を持ち、引数の数はひとつだけです。

タッチした座標は、`UIGestureRecognizer`のメソッド`func locationInView(_ view: UIView?) ->
CGPoint`あるいは`func locationOfTouch(_ touchIndex: Int, inView view: UIView?) ->
CGPoint`で取得できますから、`UITouch`がなくてもかまいません。

[code]

    // singleTap
    func singleTap(gesture: UITapGestureRecognizer) {
        for i in 0..<gesture.numberOfTouches() {
            let point = gesture.locationOfTouch(i, inView: self.view)
            let pointX = point.x
            let pointY = point.y
            print(pointX)
            print(pointY)
        }
    }
    
[/code]


CC BY-SA 3.0
2015-12-20T12:42:53.827
20220
2015-12-20T12:42:53.827
7362
20219
answer