2017-06-29 5 views
0

Ich habe gerade die letzten paar Stunden einen Fehler aufzuspüren, die in einem Übergangstreiberobjekt befindet passiert ist, wo die interruptibleAnimator Methode mehrmals genannt wurde, wo:UIViewControllerAnimatedTransitioning: mehrere Aufrufe von interruptibleAnimator?

  1. ein UIViewPropertyAnimator Abschluss Schließung eine Referenz enthalten um den Übergang [unowned self] Zusammenhang mit self.context.completeTransition(true)
  2. der Übergangssteuerung durch die Übergangssteuerung weitergegeben zu vervollständigen, die UIViewControllerAnimatedTransitioning und ein UINavigationControllerDelegate, geleitet, um den Rahmen über seine animate Methode implementiert

    extension NavigationTransitionController: UIViewControllerAnimatedTransitioning { 
    
    func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { 
        return transitionDuration 
    } 
    
    func animationEnded(_ transitionCompleted: Bool) { 
    
        // Clean up our helper object and any additional state 
        transitionDriver = nil 
    } 
    
    func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { 
        transitionDriver = TransitionDriver(context: transitionContext, duration: transitionDuration) 
        interruptibleAnimator(using: transitionContext).startAnimation() 
    } 
    
    func interruptibleAnimator(using transitionContext: UIViewControllerContextTransitioning) -> UIViewImplicitlyAnimating { 
        return transitionDriver!.transitionAnimator 
    } 
    

Wenn ich etwas sehr einfach hier fehle, ich habe keine Ahnung, warum die Übergangssteuerung mehr als 1 Aufruf der interruptibleAnimator Methode machen würde.

Meine Struktur wurde von dem inspiriert, was Apple präsentierte here in their WWDC 2016 talk; Wenn Sie einen Haltepunkt herunterladen und die Photo Transitioning-App starten, können Sie selbst sehen, dass diese Methode für denselben Übergang zweimal aufgerufen wird.

Könnte mir jemand aufklären, ob ich einen Geist jage oder ob das ein echt seltsames Verhalten ist?

Antwort

2

Apple-Staaten in den 'Kopf docs' für UIViewControllerAnimatedTransitioning:

/// A conforming object implements this method if the transition it creates can 
/// be interrupted. For example, it could return an instance of a 
/// UIViewPropertyAnimator. It is expected that this method will return the same 
/// instance for the life of a transition. 
@available(iOS 10.0, *) 
optional public func interruptibleAnimator(using transitionContext: UIViewControllerContextTransitioning) -> UIViewImplicitlyAnimating 

Das gleiche ist bei Minute 29:34 in WWDC Session 2016 angegeben. Die Beispielimplementierung auf der Folie in Minute 27:33 scheint irreführend/falsch zu sein.

Der Grund, warum es mehrmals aufgerufen wird, ist meines Wissens nicht bekannt.

Verwandte Themen