2016-05-14 8 views
0

In meiner tvOS App habe ich eine Sammlungsansicht mit Zellen, die Filme darstellen.UIGestureRecognizer funktioniert nach der ersten Verwendung nicht mehr

I 2 angebracht Geste Erkenner zu der Ansicht:

  1. Zum Film Details zur Auswahl tippen
  2. Film abspielen direkt (mit einem Apple TV Remote gewidmet Play-Taste)

let posterTap = UITapGestureRecognizer(target: self, action: #selector(ListViewController.movieSelect(_:))) 
    posterTap.allowedPressTypes = [NSNumber(integer: UIPressType.Select.rawValue)] 
    self.view.addGestureRecognizer(posterTap) 

    let posterPlay = UITapGestureRecognizer(target: self, action: #selector(ListViewController.moviePlay(_:))) 
    posterPlay.allowedPressTypes = [NSNumber(integer: UIPressType.PlayPause.rawValue)] 
    self.view.addGestureRecognizer(posterPlay) 

Und die respektierten Methoden

func movieSelect(gesture: UITapGestureRecognizer) { 
    if let cell = UIScreen.mainScreen().focusedView as? ItemCollectionViewCell { 
     let item = ItemViewController(nibName: "ItemViewController", bundle: nil) 
     item.item = cell.data 
     self.presentViewController(item, animated: true, completion: nil) 
    } 
} 

func moviePlay(gesture: UITapGestureRecognizer) { 
    if let cell = UIScreen.mainScreen().focusedView as? ItemCollectionViewCell { 
     let data = cell.data 
     // TLDR; 
     // Passing data to AVPlayerViewController and presenting it + start playing the movie. 
    } 
} 

Alles scheint zu funktionieren, abgesehen davon, dass, wenn ich aufhöre den Film zu spielen und zurück zur Liste komme (durch Schließen der AVPlayerViewController), meine zweite Gestenerkennung (Play-Taste) nicht mehr funktioniert. Es ist immer noch da wenn ich mit print(self.view.gestureRecognizers) überprüfe aber moviePlay() nie wieder angerufen wird egal was kommt.

Gibt es eine Möglichkeit, dies zu debuggen? Was könnte dieses Problem verursachen? Ich denke, dies wird verursacht durch UIGestureRecognizerState wird immer noch in "use"? Oder vielleicht so etwas. An diesem Punkt habe ich keine Ahnung.

Antwort

0

Wie hier passiert habe ich viele Tests um UITapGestureRecognizer und der Grund, warum es funktioniert zu stoppen. Was ich entdeckt habe, ist, wenn Sie Constraints Conflicts haben das passiert häufig, Autolayout lösen Sie diese Probleme, aber das hält nicht für immer, es muss keine Konflikte geben.
Auch wenn Sie setTranslatesAutoresizingMaskIntoConstraints zu falsch in irgendeinem Teil Ihres Codes können Sie dieses Problem begegnen.

+0

Ich verwende keine Einschränkungen in diesem bestimmten ViewController überhaupt. In vielen Fällen ist es nicht einmal erforderlich, da auf TVOS Sie einmal Bildschirmgröße haben, was Sie sehen, ist, was Sie bekommen :) – kernelpanic

+0

Im nicht zu verstehen, haben Sie keine Einschränkungen in ItemViewController Xib für Ihre Objekte? –

0

Ich habe Erfahrung Seltsamkeit mit Gestenerkennung auf tvOS. In meinem Fall hat sich die App aus irgendeinem Grund so verhalten, als ob Gestenerkenner nach Verwerfen der Containeransicht weiter verwendet würden. Seltsamerweise habe ich beobachtet Seltsamkeit beim Starten und Schließen AVPlayerViewController ein paar Mal auch.

Was ich getan habe, um dies zu beheben, war die Verwendung von Gestenerkennern zu entfernen und pressesEnded Methode stattdessen überschreiben.

Ich hoffe, das hilft.