7

Possible en double:
iPhone CATransition adds a fade to the start and end of any animation?Comment effectuer l'animation kCATransitionPush sans transparence/effacer les effets

Je suis en train de dupliquer le "glisser vers le haut à partir du bas" animation [UIViewController presentModalViewController: animated:] effectue mais sans l'appeler car je ne veux pas de vue modale.

Le code d'animation de base ci-dessous est très proche, mais semble changer les valeurs de transparence des vues pendant celui-ci. Au début de l'animation, vous pouvez partiellement voir à travers la vue glisser vers le haut. Au milieu/à la fin de l'animation, la vue sur laquelle nous glissons est entièrement transparente, ce qui nous permet de voir derrière elle. J'aimerais que les deux restent complètement opaques pendant cette animation.

Des idées sur la façon d'arrêter les changements de transparence dans ce code ou d'obtenir l'animation "slide up" que je recherche sans avoir besoin d'une vue modale?

UIViewController *nextViewController = [[UIViewController alloc] autorelease]; 
nextViewController.view.backgroundColor = [UIColor redColor]; 
CATransition *animation = [CATransition animation]; 
animation.duration = 3.5; 
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
animation.type = kCATransitionPush; 
animation.subtype = kCATransitionFromTop; 
[self.navigationController pushViewController:nextViewController animated:NO]; 
[self.navigationController.view.layer addAnimation:animation forKey:nil]; 

Répondre

0

Au lieu de CATransition, vous pourriez plutôt essayer d'utiliser un CABasicAnimation qui anime la position de du haut de l'écran dans la position souhaitée.

2

La méthode la plus simple consiste simplement à utiliser le bloc UIView beginAnimations/commitAnimations. Vous pouvez ajuster la durée et la courbe en consultant les documents.

{ 
    // Adjust for orientation as necessary. 
    view.frame = CGRectMake(0, 
         -480, 
         320, 
         480); 

    [UIView beginAnimations:nil context:nil]; 

    view.frame = CGRectMake(view.frame.origin.x, 
         0, 
         view.frame.size.width, 
         view.frame.size.height); 

    [UIView commitAnimations]; 
} 

Docs ici:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIView_Class/UIView/UIView.html

+0

Je ne peux pas comprendre la solution. Pourriez-vous l'expliquer un peu plus? – jalopezsuarez

+0

Ceci est une très vieille réponse, vous devriez utiliser le bloc d'animation UIVIew maintenant. https://developer.apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewPG_iPhoneOS/AnimatingViews/AnimatingViews.html – logancautrell