2016-11-21 2 views
0

Я программно добавил изображения в imageViews к родительскому scrollView в цикле for для 5 объектов в массиве. Каждому imageView был предоставлен TapGestureRecognizer, поэтому я могу нажать на них, и они вызовут функцию.
Я хочу, чтобы функция setContentOffset в scrollView указывала на местоположение в центре значений x отображаемого изображения. Я не уверен, как вытащить CGPoint из обработанного изображения. Любая помощь будет большой. Вот то, что я до сих пор:setContentOffset to UIImage loaction в scrollView

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 постучал.

ответ

1

Если вы хотите, чтобы индекс imageView установил tag этого imageView внутри вашей петли, а затем просто передайте ссылку UITapGestureRecognizer в свой метод cardTapped.

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) 

    //Set tag of imageView 
    imgView.tag = index 

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

//Now pass tapGesture reference in your method like this 
func cardTapped(gesture: UITapGestureRecognizer) { 
    if let index = gesture.view?.tag { 
     handScrollView.setContentOffset(CGPoint(x: CGFloat(index) * WIDTH, y: 0), animated: true) 
    }   
} 
+0

Спасибо! Работает как шарм. – Bezz

+0

@Bezz Добро пожаловать! –

0

Изменить

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

в

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

Это позволит вам пройти водопроводный жест в качестве параметра вашей функции, а затем вы можете получить доступ к виду был применен on-

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

Это только что привело меня к ошибке. – Bezz

Смежные вопросы