2016-04-20 10 views
2

Ich habe zwei ziehbare Elemente auf dem Bildschirm, Tabellenansicht A und Bildansicht B. A steht in der Hierarchie über B und muss immer so bleiben. Das Diagramm unten umreißt das Problem.Gesten auf Objekten auf einer unteren Ebene ausführen

gestures on layers http://www.kettleholdings.com/gestures.jpg

Bevor ich diese Codierung zu starten, ist die über eine tragfähige und glaubwürdige Lösung für dieses Problem oder ist es eine Art von cleveren Priorität Einstellung, die die B Geste immer ausgelöst wird, wenn die Interaktion sowohl über A liegt und B?

Dank

+0

http://stackoverflow.com/questions/3834301/ios-forward-all-touches-through-a-view – Dare

+0

Wo sind Ihre Gesten konfiguriert? In jeder Ansicht einzeln oder in der Hauptansicht? Ich empfehle Ihnen diese letzte Option, damit Sie die gleiche Aktion für die Gesten in beiden Ansichten haben. Wenn Sie auf die Methode zugreifen, die von der Geste aufgerufen wird, können Sie daher auf den berührten Punkt zugreifen: CGPoint touchPoint = [GestenRecognizer locationInView: self.view]; Danach können Sie [imageViewB pointInside: touchPoint withEvent: nil]; um zu überprüfen, ob die Bildansicht B diesen Berührungspunkt enthält. Wenn es wahr ist, dann verschiebe diese Ansicht anstelle von A. – Leandro

+0

Danke Leute - die Verweise auf pointinside haben mir einen guten Ausgangspunkt gegeben, um das herauszufinden. Kann ich bestätigen, dass ich die Geste zur Hauptansicht hinzufüge, und wenn die Geste aufgerufen wird, überprüfe ich, welche Elemente den Punkt enthalten, der berührt wurde, und entscheide, welcher von ihnen die Aktion zugewiesen wird? – RobertyBob

Antwort

0

Um die doppelte Antwort hat mir geholfen, zu klären, eine Lösung zu finden, wie folgt.

Setzen Sie die Gesten auf die Hauptansicht und bestimmen Sie dann im Gestenerkennungsprozess, welche Objekte sich dort befinden, wo die Geste ausgeführt wurde und ob die Geste etwas bewirken soll.

func doLongPressGesture(sender: UILongPressGestureRecognizer) {  
    let touchLocation = sender.locationInView(self.view) 
    if CGRectContainsPoint(myChosenObject.frame, touchLocation) { 
     .... 
    } 
}