setContentOffset到scrollView中的UIImage loaction

时间:2016-11-21 06:28:14

标签: ios iphone swift uiscrollview uikit

我已经以编程方式将imageViews中的图像添加到数组中5个对象的for循环中的父scrollView。每个imageView都有一个TapGestureRecognizer,所以我可以点击它们,他们会调用一个函数 我希望函数将scrollView中的setContentOffset设置为点击图像的x值中心的位置。我不知道如何从tapped imageView中拉出CGPoint。任何帮助都会很棒。 以下是我到目前为止的情况:

override func viewDidLoad() {
    super.viewDidLoad()

    /*for (index, element) in list.enumerated()*/
    for (index, element) in cardsInHand.enumerated() {
        let img = UIImage(named: "\(element)")
        let imgView = UIImageView(image: img)
        imgView.isUserInteractionEnabled = true
        handScrollView.addSubview(imgView)

        //add tap gesture recognizer
        let tapRec = UITapGestureRecognizer(target: self, action: #selector(self.cardTapped))
        imgView .addGestureRecognizer(tapRec)

        imgView.frame = CGRect(x: 5 + (5 + WIDTH) * CGFloat(index), y:  5, width: WIDTH, height: HEIGHT)
    }


//test at card tapped function
func cardTapped(){
    handScrollView.setContentOffset(CGPoint(x: WIDTH, y: 0), animated: true)
}

到目前为止,它只是将scrollView上的偏移量设置为WIDTH(即110),无论哪个卡被点击,因为我不知道如何引用imgView被点击。

2 个答案:

答案 0 :(得分:1)

如果您希望索引imageView在您的循环中设置tag的{​​{1}},那么只需在您的方法imageView中传递UITapGestureRecognizer的引用}。

cardTapped

答案 1 :(得分:0)

更改

let tapRec = UITapGestureRecognizer(target: self, action: #selector(self.cardTapped))

let tapRec = UITapGestureRecognizer(target: self, action: #selector(self.cardTapped(_:)))

这样您就可以将点击手势作为参数传递给您的函数,然后您就可以访问它所应用的视图 -

func cardTapped(_ sender: UITapGestureRecognizer) {
    print(sender.view?.center)
}