我已经以编程方式将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被点击。
答案 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)
}