46 votes

Méthode appropriée pour implémenter une transition interactive UIViewController personnalisée à l'aide du protocole de délégation UIViewControllerInteractiveTransitioning

Je suis intéressé par un concis exemple de comment créer un NSObject sous-classe qui implémente l' UIViewControllerInteractiveTransitioning le protocole pour gérer un interactif personnalisé de transition entre les deux UIViewControllers. Idéalement, en réponse à un mouvement de balayage. Quelque chose de semblable à l'iOS7 par défaut interactif de balayage, qui vient maintenant avec UINavigationController, mais une coutume/manuel de l'exemple de mise en œuvre de cette.

J'ai lu les docs:

Et vu quelques exemples ailleurs:

  • un
  • deux
  • trois
  • quatre (j'ai mis cela en place mais c'est plus sur UIViewController containment et le manuel de mise en œuvre de ces transitions plutôt que d' UIViewControllerInteractiveTransitioning

Les docs sont assez claires, mais ne pas référence exemple de code. Et les exemples qui laissent un peu à désirer (des questions sans réponse au sujet de la façon dont les différents éléments sont liés entre eux).

Donc mes questions sont:

  1. Quelqu'un peut-il aider à remplir les blancs sur la façon de cravate d'un geste (par exemple, un balayage) de l'objet qui implémente l' UIViewControllerInteractiveTransitioning protocole?
  2. Quelle est la relation entre l'objet de la mise en œuvre de la UIViewControllerInteractiveTransitioning protocole et que la mise en œuvre de la UIViewControllerAnimatedTransitioning protocole? Semble que vous devez avoir à la fois de déclencher interactive transitions...

Merci à l'avance...

13voto

MatterGoal Points 2522

1) La façon la plus simple de la cravate d'un geste à l' UIViewControllerInteractiveTransitioning objet, il est sous-classe de la UIPercentDrivenInteractiveTransition. Alors où vous mettez en œuvre le geste de gestionnaire, vous appelez updateInteractiveTransition: voici un exemple avec le code:

-(void)handlePinch:(UIPinchGestureRecognizer *)pinch {

    CGFloat scale = pinch.scale;
    switch (pinch.state) {
      case UIGestureRecognizerStateBegan: {
          _startScale = scale;
          self.interactive = YES;
          [self.navigationController popViewControllerAnimated:YES];
          break;
      }
      case UIGestureRecognizerStateChanged: {
          CGFloat percent = (1.0 - scale/_startScale);
          [self updateInteractiveTransition:(percent < 0.0) ? 0.0 : percent];
          break;
      }
      case UIGestureRecognizerStateEnded: {
          CGFloat percent = (1.0 - scale/_startScale);
          BOOL cancelled = ([pinch velocity] < 5.0 && percent <= 0.3);
          if (cancelled) [self cancelInteractiveTransition];
          else [self finishInteractiveTransition];
          break;
      }
      case UIGestureRecognizerStateCancelled: {
          CGFloat percent = (1.0 - scale/_startScale);
          BOOL cancelled = ([pinch velocity] < 5.0 && percent <= 0.3);
          if (cancelled) [self cancelInteractiveTransition];
          else [self finishInteractiveTransition];
          break;
      }
    }
}

Ce code est à partir de http://www.captechconsulting.com/blog/tyler-tillage/ios-7-tutorial-series-custom-navigation-transitions-more

2) La fonction animateTransition de UIViewControllerAnimatedTransitioning est utilisé pour effectuer la interactive de transition. Il est automatiquement divisé en "images clés" merci de votre appel précédent à l' updateInteractiveTransition. Mais je suppose que si vous mettez en œuvre votre startInteractiveTransition: méthode de UIViewControllerInteractiveTransitioning (donc sans l'aide d' UIPercentDrivenInteractiveTransition sous-classe), alors vous êtes responsable de la gestion de la entièrement de transition (pas sûr à ce sujet.. désolé mais la documentation, à mon avis, n'est pas vraiment clair).

2voto

-2voto

cmd Points 45

Je viens de voir un exemple d'application iOS7 avec différentes transitions personnalisées. Vous pouvez peut-être vous en inspirer:

https://github.com/shu223/iOS7-Sampler/blob/master/iOS7Sampler/SampleViewControllers/CustomTransitionViewController.m

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X