2016-05-29 11 views
0

Ich versuche, eine Schwenkgeste mit Swift hinzufügen und ich bin nicht in der Lage, dies funktioniert zu bekommen. Bei der Fehlersuche kann ich nur bestätigen, dass der Handler nicht angerufen wird. In haben eine Unterklasse von UIViewController namens RMConstructionViewController. In diesem Controller habe ich eine scrollView, die eine UIView enthält, die den gesamten Raum als Inhalt einnimmt. Dann bin ich programmatisch Subviews zu meinem ContentView hinzufügen. Meine komplette Ansicht heirachy ist wie folgt:Kann nicht pannen Geste arbeiten

  1. UIView -> RMConstructionViewController
  2. UIScrollView -> Scroll
  3. UIView -> My content
  4. UIView -> programmatisch Upperview
  5. UIView genannt hinzugefügt -> Die view Ich möchte panning namens symbolView
  6. UILabel -> Ich möchte symbolView ein paar Elemente zu beherbergen, aber im Moment enthält es nur ein einzelnes Etikett und ist sizeToFit die Größe des Etiketts.

Ich glaube, ich bin immer verwirrt, was genau ist das Ziel, usw. Hier ist, was ich dachte funktionieren würde:

let gestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handleDatePan(_:))) 
symbolView.addGestureRecognizer(gestureRecognizer) 

direkt nach dem obigen Code, ich sofort meine symbolView addieren, Upperview:

upperView.addSubview(symbolView) 

Dann ist mein Handler:

@IBAction func handleDatePan(gestureRecognizer: UIPanGestureRecognizer) { 
    if gestureRecognizer.state == UIGestureRecognizerState.Began || gestureRecognizer.state == UIGestureRecognizerState.Changed { 

     let translation = gestureRecognizer.translationInView(upperView) 
     if gestureRecognizer.view!.center.x >= 0 && gestureRecognizer.view!.center.x <= currentRoadmap!.timeline!.width{ 
      gestureRecognizer.view!.center = CGPointMake(gestureRecognizer.view!.center.x + translation.x, gestureRecognizer.view!.center.y) 
      if gestureRecognizer.view!.center.x < 0 { 
       gestureRecognizer.view!.center.x = 0 
      } 
      if gestureRecognizer.view!.center.x > currentRoadmap!.timeline!.width { 
       gestureRecognizer.view!.center.x = currentRoadmap!.timeline!.width 
      } 
      gestureRecognizer.setTranslation(CGPointMake(0,0), inView: upperView) 
     } 
    } 
} 

In dem obigen Code entspricht die "currentRoadmap! .timeline! .width" einem CGFloat

Irgendwelche Ideen, warum ich die Pfanne nicht zum Funktionieren bringen kann?

Antwort

0

Das Problem könnte aufgrund von UIScrollView hat einen eigenen GestureRecognizer. Das UIGestureRecognizerDelegate Protokoll hat eine Methode mehr GestureRecognizers zu ermöglichen gleichzeitig das Ereignis zu behandeln:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWithGestureRecognizer otherGestureRecognizer: UIGestureRecognizer) -> Bool { 
    return true 
} 
+0

Ich dachte das gleiche (nach ein paar Stunden zu versuchen, dies zu arbeiten) und fügte den Code, den Sie oben erwähnt. Es hat nicht geholfen. – BPratt

0

ich es herausgefunden - endlich. Bei der programmgesteuerten Einstellung der Geste ist das Ziel, das funktioniert hat, meine Klasse (Selbst). Dann konnte ich meine Unteransicht (symbolView) direkt zu scrollView hinzufügen. Es gab also etwas in der Ansichtshierarchie, das ich erstellen wollte und das verbot, dass die Schwenkbewegung funktioniert. Ich weiß eigentlich nicht, warum die Hierarchie das Problem ist, aber ich habe es zum Laufen gebracht.