2015-10-24 4 views
6

Ich habe gerade begonnen, meiner App die grundlegenden 3D Touch-Funktionen hinzuzufügen, und der erste Versuch, es hinzuzufügen, ist gut verlaufen, scheint ziemlich einfach zu sein.Erkennen, wenn ein iOS 3D Touch Peek beendet ist (ohne Pop)

Ich fragte mich jedoch, ob es einen Weg gab zu erkennen, dass ein Blick beendet war, und nicht in den Pop gegangen.

Die UIViewControllerPreviewingDelegate-Methoden sind gut, um Ihnen zu sagen, dass ein Peek oder Pop angefordert wird, aber ich sehe keinen Weg, um zu erfahren, dass der Peek beendet und NICHT in einen Pop gegangen ist.

Hat der Peeked ViewController eine Möglichkeit zu wissen, dass er im Moment angeschaut wird und weggeht, wie ich denke, das wäre ausreichend. Grundsätzlich habe ich ein Segment, das normalerweise einige Dinge erzeugt, wenn es in die Ansicht hineingeht, was, wenn ich hinein gucke, rückgängig gemacht werden müsste, wenn der Benutzer den Blick einfach beendet, ohne hineinzukommen. Im Moment kann ich nicht scheinen Sehen Sie eine gute Möglichkeit, diesen Fall zu erkennen, um die erforderliche Säuberung durchführen zu können.

Prost

+0

Ich habe ein gleiches Problem. Hoffnung Apple fügt UIViewControllerPreviewingDelegate eine weitere Funktion hinzu. – HMHero

+1

Momentan können Sie ein Flag haben, das Ihnen mitteilt, dass der vc späht oder nicht und setzen Sie es in previewingContext (previewingContext: UIViewControllerPreviewing, viewControllerForLocation Speicherort: CGPoint) und in previewingContext auf false zurückgesetzt (previewingContext: UIViewControllerPreviewing, commitViewController viewControllerToCommit: UIViewController). – HMHero

+0

Dank hatte ich ähnliche Gedanken und sogar ein Protokoll für alle Peek-Aktionen, von denen ich dachte, dass sie gut sein würden, um auf dem Blickwinkel der Blicke empfangen zu werden. Leider verschwindet die Vorschauansicht, bevor die Popup-Ansicht aufgerufen wurde, so dass ich immer noch nicht unterscheiden kann, ob der Peek verschwindet und der Peek in den Pop geht. – jimbobuk

Antwort

15

Wenn Sie sich registrieren für die Verwendung von registerForPreviewingWithDelegate() Vorschau, gibt diese einen Kontext, der das UIViewControllerPreviewing Protokoll entspricht. Dieses Protokoll enthält einen Verweis auf den Gestenerkenner, der beim Spähen/Poppen verwendet wird, genannt previewingGestureRecognizerForFailureRelationship. Es wird verwendet, wenn andere Gestenerkenner gleichzeitig erkannt werden. Sie können jedoch auch ein eigenes Objekt als Ziel hinzufügen, um Änderungen zu beobachten.

Jetzt, wenn Sie spähen, wird der Status dieser Gestenerkennung .Changed sein. Wenn Sie ohne Popping loslassen, ändert sich der Status in .Ended. Wenn Sie Pop machen, ändert sich der Status zu .Cancelled (ich habe tatsächlich erwartet, dass dies der andere Weg ist, aber zumindest können wir den Unterschied erkennen). Wichtig ist, dass dieser Zustand vor der viewDidDisappear Ihres Peeked View-Controllers geändert wird, so dass Sie Ihre Flagge rechtzeitig anpassen können.

+0

Danke, klingt wirklich vielversprechend. Ich werde es mir ansehen und die Antwort annehmen, sobald es funktioniert! Vielen Dank! – jimbobuk

+1

das funktioniert, aber wenn man scrollt für previewActionItems wird es dann .Ended auch wenn wir noch im Peek-Modus sind – CiNN

+3

Ich schrieb Beispielcode in Swift: [ShingoFukuyama/3DTouchDetectStateOfPeekPopCancel] (https://github.com/ShingoFukuyama/3DTouchDetectStateOfPeekPopCancel) –

Verwandte Themen