7

Ho un controller di navigazione laterale e lo presento tramite un UIButton. Quando faccio questo NC il controller vista radice direttamente da [self presentviewcontroller: NC animated: YES completion: nil], qualche ragione il lato menu del NC è bloccato da un UITransitionView che non riesco a far scomparire.Visualizzazione bloccata da UITransitionView dopo la presentazione

Ho allegato un'immagine dello view hierarchy. Here è un altro.

Ho provato quanto segue:

UIWindow *window = [(AppDelegate *)[[UIApplication sharedApplication] delegate] window]; 
    window.backgroundColor = kmain; 


    CATransition* transition = [CATransition animation]; 
    transition.duration = .5; 
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    transition.type = kCATransitionPush; 
    transition.subtype = kCATransitionFromTop; 

    [nc.view.layer addAnimation:transition forKey:kCATransition]; 

    [UIView transitionWithView:window 
         duration:0.5 
         options:UIViewAnimationOptionTransitionNone 
        animations:^{ window.rootViewController = nc; } 
        completion:^(BOOL finished) { 
         for (UIView *subview in window.subviews) { 
          if ([subview isKindOfClass:NSClassFromString(@"UITransitionView")]) { 
           [subview removeFromSuperview]; 
          } 
         } 
        }]; 

Ma è molto hacky, e come il RootViewController della finestra cambia durante la transizione, è un po 'mosso e parte del navigationController e in alto a destra nero. Sembra molto male.

+0

avete fatto trova la causa principale? Ho incontrato lo stesso problema qui. Rimuovere la vista o disabilitare il tocco sulla vista sembra una soluzione, ma come evitarlo? Non capisco perché è venuto fuori. – RainCast

+0

E 'stato tanto tempo fa che non ne sono del tutto sicuro, ma credo di aver cambiato completamente le librerie e sono andato con JASidePannelController: https://github.com/gotosleep/JASidePanels Molto più facile da lavorare. – Jameson

+0

Grazie @jameson! – RainCast

risposta

1

Ho avuto lo stesso problema ma in uno scenario leggermente diverso, ho finito per fare qualcosa di molto simile a trovare la vista ma invece di rimuovere la vista che può essere più problematica ho disabilitato l'interazione dell'utente così ogni evento di tocco appena gettato e ogni altro oggetto può gestire l'interazione dell'utente. Nel mio caso questo era presente solo dopo aver aggiornato l'app su iOS 10, lo stesso codice in esecuzione su iOS 9 non rientrava in questo.

3

Per ottenere eventi tap tramite lo UITransitionView, impostare lo containerView di userInteractionEnabled su false. Questo è se stai facendo un'animazione di transizione personalizzata usando UIViewControllerAnimatedTransitioning.

esempio, nel animateTransition(_:):

func animateTransition(transitionContext: UIViewControllerContextTransitioning) { 

    let containerView = transitionContext.containerView()   
    containerView.userInteractionEnabled = false 

    ... 
} 
+3

Se imposto le interazioni di containerView a disabilitato, anche i clic sulla vista presentata cadono. – Alper

+0

qualsiasi soluzione a questo? – yasirmturk

-1

Il migliore, rimuovere UITransitionView, per essere chiari

uso di questo codice linea SWIFT 3,0

@IBAction func MoveBack(_ sender: Any) 
 
    { 
 
     dismiss(animated: true, completion: nil) 
 
     
 
    }