Question

J'ai un bouton personnalisé sur une vue de contrôleur de la navigation du contrôleur de la hiérarchie, que lorsqu'il est pressé, pop le visible-vue-contrôleur.

Je veux utiliser UIView de l' transform propriété à animer la clôture de la vue-contrôleur.Il fonctionne, mais si j'utilise " popViewControllerAnimated:OUI, la valeur par défaut à gauche de la diapositive de l'animation est toujours là, bien que ma transformation personnalisée fonctionne également.

Si j'ai mis popViewControllerAnimated:NO il n'a pas d'animer quoi que ce soit.

J'ai aussi regardé dans l'aide de CATransition qui fonctionne lorsque j'ai popViewControllerAnimated mis à NO, mais il n'y a pas un "zoom" en effet, c'est la partie de l'API publique, et je ne veux pas utiliser le privé d'effet.Les filtres personnalisés ne sont pas disponibles pour l'iPhone, seul OS X.

Donc je suppose que mes questions sont les suivantes:

1) Est-il un moyen de supprimer la gauche de la diapositive dans la transition par défaut mais ont encore une animation personnalisée à l'aide de transform?

2) d'une Certaine façon à utiliser un filtre personnalisé pour CATransition?

3) Si j'utilise une API privée de l'effet de loupe comment il est probable qu'Apple va lancer mon application dans le rejet de la corbeille?

Quelqu'un aurait-il une solution, je suis dominant?

Était-ce utile?

La solution

J'ai fait quelque chose de similaire à ce que vous décrivez, c'est à diremodifier la valeur par défaut de l'animation pour la pop et push de vue en UINavigationController.

L'idée est de désactiver l'animation par défaut pour l'objet et le remplacer par votre propre animation.J'ai créé une nouvelle catégorie pour UINavigationController et utilisé une fonction similaire à celui ci-dessous.

 - (void) altAnimatePopViewControllerAnimated:(BOOL)animated
 {
[CATransaction begin];

CATransition *transition;
transition = [CATransition animation];
transition.type = kCATransitionPush;          // Use any animation type and subtype you like
transition.subtype = kCATransitionFromTop;
transition.duration = 0.3;

CATransition *fadeTrans = [CATransition animation];
fadeTrans.type = kCATransitionFade;
fadeTrans.duration = 0.3;


[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];

[[[[self.view subviews] objectAtIndex:0] layer] addAnimation:transition forKey:nil];
[[[[self.view subviews] objectAtIndex:1] layer] addAnimation:fadeTrans forKey:nil];



[self  popViewControllerAnimated:YES];
[CATransaction commit];
   }

pour utiliser il suffit d'utiliser le code

   [self.navigationController altAnimatePopViewControllerAnimated:YES];

Dans le but de faire un push il suffit de créer une autre fonction similaire et d'inverser l'animation.

Il n'est pas parfait, mais il fonctionne.Lorsque vous choisissez les différents types d'animation, de jouer avec les différents sous-vues de la composition de la barre de navigation/contrôleur pour la rendre parfaite.

Pris mon tout blanc à venir avec ce, afin de l'utiliser à bon escient :)

******* EDIT

Essayez de remplacer le poussoir de transition avec ce (N'essayez pas de moi):

  CAKeyframeAnimation *scale = [CAKeyframeAnimation animationWithKeyPath:@"transform.scale"];
  scale.duration = duration;
  scale.values = [NSArray arrayWithObjects:[NSNumber numberWithFloat:.5f],
              [NSNumber numberWithFloat:1.2f],
              [NSNumber numberWithFloat:.85f],
              [NSNumber numberWithFloat:1.f],
              nil];

Cela va faire un pop, c'est à direla vue sera plus grand avant qu'il s'installe à la bonne taille.Jouer avec les valeurs dans le tableau de contrôle de la courbe de l'animation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top