2017-11-05 3 views
0

Ich habe ein paar UIImageViews in horizontalen UIStackViews, verpackt in einem vertikalen UIStackView, alle zusammen in einem UIScrollView verpackt. In allen UIxx-Elementen ist "Benutzerinteraktion aktiviert" aktiviert. Meine UIViewController versucht, die Wasserhähne zu fangen, wie so:Tippen Sie auf Erkennung UIImageView innerhalb von UIStackView innerhalb von UIScrollView

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if let touch = touches.first { 

     if touch.view is UIImageView { 
      print("Touch began in image view") 
     } 
    } 
    super.touchesBegan(touches, with:event) 
} 

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
    if let touch = touches.first{ 
     if touch.view is UIImageView { 
      print("Touch ended in image view") 
     } 
    } 
    super.touchesEnded(touches, with: event) 
} 

jedoch, was ich tun kann ich nicht berührt erfassen aus dem UIImageViews in der Stapelansicht enthält. Nichts passiert dann. Die Handler werden nicht aufgerufen. Es gibt noch eine weitere UIView, die gut reagiert.

View-Layout-in angehängtem Bild

Alle Zeiger willkommen.

View Layout

+0

ein wenig weiter Got getan wurde: Had a UITapGestureRecognizer auf die UIScrollView um abfangen berührt UIImageViews hinzuzufügen. \t \t lassen tapGesture = UITapGestureRecognizer (Ziel: Selbst, Aktion: #selector (tapScrollView)) \t \t scrollView.addGestureRecognizer (tapGesture) \t \t @objc func tapScrollView (Sender: UITapGestureRecognizer) { \t \t print ("abgehört") \t}. Jetzt müssen Sie das berührte Bild identifizieren – decades

Antwort

0

OK, hier die Antwort.

1) eine UITapGestureRecognizer zum UIScrollView in viewDidLoad

@IBOutlet weak var scrollView: UIScrollView! 

...

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(tapScrollView)) 
scrollView.addGestureRecognizer(tapGesture) 

2) Geben Sie jeden UIImageView einen eindeutigen Tag

3) In dem angezapfte Finden UIImageView

@objc func tapScrollView(sender: UITapGestureRecognizer) { 
    for stackView in self.scrollView.subviews[0].subviews[0].subviews { 
     for imageView in stackView.subviews { 
      let location = sender.location(in: imageView) 
      if let hitImageView = imageView.hitTest(location, with: nil) { 
       print("Tapped", hitImageView.tag) 
      } 
     } 
    } 
} 

Natürlich hängt die Identifizierung der geeigneten Behälter Ansichten über die Umsetzung, so in meinem Fall ist es von

self.scrollView.subviews[0].subviews[0].subviews 
Verwandte Themen