f?:@'.$&2& %g&1'210*%a'*5% h&$02'$$%!5&102$%!,ij · openxava ver todos los tutoriales del autor...

Click here to load reader

Upload: trinhliem

Post on 29-Jul-2018

230 views

Category:

Documents


0 download

TRANSCRIPT

  • Avenida de Castilla,1 - Edificio Best Point - Oficina 21B28830 San Fernando de Henares (Madrid)

    tel./fax: +34 91 675 33 [email protected] - www.autentia.com

    Somos su empresa de Soporte a Desarrollo Informtico.Ese apoyo que siempre quiso tener...

    1. Desarrollo de componentes y proyectos a medida

    TecnologaDesarrolloSistemas

    Gran Empresa

    Produccin

    autentia

    Certificacino Pruebas

    Verificacin previa

    RFP Concurso

    Consultora 1

    Consultora 2

    Consultora 3

    Equipo propio desarrolloPiloto

    3a

    3b

    1. Definicin de frameworks corporativos.2. Transferencia de conocimiento de nuevas arquitecturas.3. Soporte al arranque de proyectos.4. Auditora preventiva peridica de calidad.5. Revisin previa a la certificacin de proyectos.6. Extensin de capacidad de equipos de calidad.7. Identificacin de problemas en produccin.

    3. Arranque de proyectos basados en nuevas tecnologas

    Qu ofrece Autentia Real Business Solutions S.L?

    Para ms informacin vistenos en: www.autentia.com

    Compartimos nuestro conociemiento en: www.adictosaltrabajo.com

    Gestor portales (Liferay)Gestor de contenidos (Alfresco)Aplicaciones hbridas

    Tareas programadas (Quartz)Gestor documental (Alfresco)Inversin de control (Spring)

    BPM (jBPM o Bonita)Generacin de informes (JasperReport)ESB (Open ESB)

    Control de autenticacin y acceso (Spring Security)UDDIWeb ServicesRest ServicesSocial SSOSSO (Cas)

    Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery

    JPA-Hibernate, MyBatisMotor de bsqueda empresarial (Solr)ETL (Talend)

    Direccin de Proyectos Informticos.Metodologas gilesPatrones de diseoTDD

    2. Auditora de cdigo y recomendaciones de mejora

    4. Cursos de formacin (impartidos por desarrolladores en activo)

  • 1/8/14 Transiciones personalizadas en iOS7

    www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=transiciones_personalizadas_ios7 1/8

    Entra en Adictos a travs de

    Entrar

    E-mail

    Contrasea

    Deseo registrarmeOlvid mi contrasea

    Inicio Quines somos Formacin Comparador de salarios Nuestros libros Ms

    Ests en: Inicio Tutoriales Transiciones personalizadas en iOS7

    Sguenos a travs de:

    Catlogo de servicios

    Autentia

    ltimas Noticias

    IX Autentia Cycling Day(ACTUALIZADO)

    Autentia en la carrera delas empresas

    Spring 4.0 qu hay denuevo amigo?

    Torneo de pdel solidarioAMEB

    Prxima charla: Gradlecomo alternativa a Mavenpara la construccin deproyectos en Java

    Histrico de noticias

    ltimos Tutoriales

    Spring BeanPostProcessor

    Cmo montar un raid1 enuna mquina corriendodebian.

    Notificaciones locales eniOS.

    Configuracin bsica deseguridad en servidor linuxcon iptables y fail2ban

    Desarrollo rpido deaplicaciones CRUD conOpenXava

    Ver todos los tutoriales del autor

    Ignacio Acisclo Prez

    Consultor tecnolgico de desarrollo de proyectos informticos.

    Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo,factora y formacin

    Somos expertos en Java/J2EE

    Fecha de publicacin del tutorial: 2014-01-08 Tutorial visitado 30 veces Descargar en PDF

    Transiciones personalizadas en iOS7

    ndice de contenidos

    1. Introduccin2. Entorno3. Creando proyecto.4. Conclusiones.

    1. Introduccin

    IOS7 introduce nuevas clases para facilitar a los desarrolladores la posibilidad de hacer transiciones a nuestro gusto,tanto en la presentacin de pantallas de forma modal como en los UINavigationsControllers y los UITabBarControllers,por lo que el lmite es nuestra imaginacin, empezamos a ver un poco de teora, las clases que juegan en este papel sonlas siguientes;

    UIViewControllerAnimatedTransitioning: Este protocolo tiene tres mtodos, uno de ellos opcional, losprincipales son (transitionDuration: ) y (animateTransition: ) en los cuales se determina la duracin y la animacinque se va a ejecutar.UIViewControllerTransitioningDelegate: Este es el protocolo al que tiene que acogerse el controlador queimplemente las transiciones modales personalizadas, tiene 4 mtodos opcionales, dos para las transiciones pordefecto (animationControllerForPresentedController: presentingController:sourceController:) y(animationControllerForDismissedController:) para presentar y ocultar respectivamente y otros dos para lastransiciones interactivas, en las cuales se puede interactuar con la animacin con un gesto por ejemplo(interactionControllerForPresentation:) y (interactionControllerForDismissal:).UIViewControllerContextTransitioning: Este protocolo nos proporcionara toda la informacin acerca delcontexto de la transicin, no tiene implementacin , solo nos provee de informacin.UINavigationControllerDelegate: Este ya le conoceris unos cuantos, pero ahora en iOS7 tiene un par demtodos ms para la implementacin de las transiciones personalizadas, el primero es(navigationController:interactionControllerForAnimationController:) para las transiciones interactivas y(navigationController: animationControllerForOperation:fromViewController:toViewController:) para las transicionespor defecto.UITabBarControllerDelegate: Al igual que el protocolo del navigationController en iOS7 aade unos metodospara las transiciones (tabBarController:interactionControllerForAnimationController:) para las transicionesinteractivas y (tabBarController:animationControllerForTransitionFromViewController:toViewController:) para las depor defecto.

    Bien una vez vistos los protocolos y mtodos vamos a ver un poco de cdigo, vamos a crear un proyecto que haga dostipos de transiciones, una de tipo modal y otra de tipo de navegacin.

    2. Entorno

    Macbook pro core i7 con 8gb RAMSO: MavericksIDE: Xcode 5.0.2.

    3. Creando proyecto.

    Vamos a crear un nuevo proyecto en Xcode de tipo single View aplication, y vamos a borrar el controlador del storyboardque viene por defecto y aadir unUINavigarionController, recordar poner un identifirer a la celda que viene por defectoen el UITableViewController. Vamos a crear una clase que herede UITableViewController llamada MasterViewControllery la vamos a linkar al controlador de tipo tabla que nos ha arrastrado el UINavigationController.

    http://www.autentia.com/https://www.facebook.com/dialog/oauth?client_id=352394641441455&redirect_uri=http%3A%2F%2Fwww.adictosaltrabajo.com%2Fsocial-sas%2Flogin-from-facebook-callback.php&state=6bde931f99f19894b302d5c7fd658e18http://www.adictosaltrabajo.com/social-sas/gui/register.inc.phphttp://www.adictosaltrabajo.com/forgot_password.phphttp://www.adictosaltrabajo.com/index.phphttp://www.adictosaltrabajo.com/quienes-somos.phphttp://www.autentia.com/cursos.phphttp://www.adictosaltrabajo.com/comunidad/comunidad.phphttp://www.adictosaltrabajo.com/books.phphttp://www.adictosaltrabajo.com/index.phphttp://www.adictosaltrabajo.com/tutoriales.phphttp://www.facebook.com/group.php?gid=117232791654259http://www.autentia.com/index.phphttp://www.adictosaltrabajo.com/detalle-noticia.php?noticia=356http://www.adictosaltrabajo.com/feeds.phphttp://twitter.com/adictosaltrabajhttp://www.facebook.com/pages/AdictosAlTrabajo/353360561767http://www.linkedin.com/groups?mostPopular=&gid=2768318https://www.xing.com/net/pri9ab884x/econ_trabajoadictohttp://www.youtube.com/user/AutentiaMediahttp://www.adictosaltrabajo.com/historico-home.phphttp://www.adictosaltrabajo.com/detalle-noticia.php?noticia=405http://www.adictosaltrabajo.com/detalle-noticia.php?noticia=413http://www.adictosaltrabajo.com/detalle-noticia.php?noticia=412http://www.adictosaltrabajo.com/detalle-noticia.php?noticia=411http://www.adictosaltrabajo.com/detalle-noticia.php?noticia=410http://www.adictosaltrabajo.com/historico-home.phphttp://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=spring_beanPostProcessorshttp://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=raid1_debianhttp://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=notificaciones_locales_ioshttp://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=iptables_fail2banhttp://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=openxavahttp://www.adictosaltrabajo.com/index.php?filter=tutorials&autor=83http://www.adictosaltrabajo.com/usuarios/iacisclohttp://www.autentia.com/http://www.adictosaltrabajo.com/tutoriales/retornapdf.php?pdf=transiciones_personalizadas_ios7

  • 1/8/14 Transiciones personalizadas en iOS7

    www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=transiciones_personalizadas_ios7 2/8

    ltimos Tutoriales del

    Autor

    Notificaciones locales eniOS.

    ltimas ofertas de

    empleo

    2011-09-08Comercial - Ventas -MADRID.

    2011-09-03Comercial - Ventas -VALENCIA.

    2011-08-19Comercial - Compras -ALICANTE.

    2011-07-12Otras Sin catalogar -MADRID.

    2011-07-06Otras Sin catalogar -LUGO.

    Bien ahora vamos a crear un fichero .h al que llamaremos AnimationDelegate.h y escribimos lo siguiente;

    view plain print ?

    01. #import 02.

    03. @protocol IACAnimationControllerDelegate

    04.

    05. @property (nonatomic, assign) NSTimeInterval presentationDuration;

    06.

    07. @property (nonatomic, assign) NSTimeInterval dismissalDuration;

    08.

    http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=notificaciones_locales_ioshttp://www.adictosaltrabajo.com/empleo/resumenoferta.php?oferta=283http://www.adictosaltrabajo.com/empleo/resumenoferta.php?oferta=282http://www.adictosaltrabajo.com/empleo/resumenoferta.php?oferta=280http://www.adictosaltrabajo.com/empleo/resumenoferta.php?oferta=278http://www.adictosaltrabajo.com/empleo/resumenoferta.php?oferta=277

  • 1/8/14 Transiciones personalizadas en iOS7

    www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=transiciones_personalizadas_ios7 3/8

    09. @property (nonatomic, assign) BOOL isPresenting;

    10.

    11. @end

    12.

    13.

    Ahora creamos una clase que herede NSObject a la que llamaremos ModalTransition e importamos el fichero queacabamos de crear y adoptamos su protocolo, tambin vamos a crear las propertys necesarias y los mtodos delprotocolo UIViewControllerAnimatedTransitioning, nos quedara de esta forma;

    view plain print ?

    01. #import 02. #import "IACAnimationController.h" 03.

    04. @interface IACModalTransition : NSObject 05.

    06. @property (nonatomic ) BOOL isPresenting;

    07. @property (nonatomic, assign) NSTimeInterval presentationDuration;

    08. @property (nonatomic, assign) NSTimeInterval dismissalDuration;

    09. @property (nonatomic, strong) id transitionContext;

    10.

    11. -(NSTimeInterval)transitionDuration:(id)transitionContext;

    12. -(void)animateTransition:(id)transitionContext; 13.

    14. @end

    15.

    16.

    Bien, ahora vamos a implementar los mtodos en el .m;

    view plain print ?

    01. #import "IACModalTransition.h" 02.

    03. @implementation IACModalTransition

    04.

    05. -(id)init{

    06. self = [super init]; 07.

    08. if(self){ 09.

    10. self.presentationDuration = 1.0;

    11. self.dismissalDuration = 0.5;

    12. }

    13.

    14. return self; 15. }

    16.

    17. -(NSTimeInterval)transitionDuration:(id)transitionContext{

    18.

    19. return self.isPresenting ? self.presentationDuration : self.dismissalDuration; 20. }

    21.

    22. -(void)animateTransition:(id)transitionContext{ 23.

    24. }

    25.

    26. @end

    Antes de ponernos con la magia de CoreAnimation vamos a preparar la tabla, en la clase controladora que hemosllamado MasterViewController, vamos al .h y vamos a crear un array para poblar la tabla, una propiedad para nuestroAnimationController y nos vamos a acoger a los protocolos que vamos a necesitar para hacer nuestras transiciones, nosquedara de esta forma;

    Bien en el .m vamos a iniciar el array y decirle a la tabla que tiene 1 seccin y dos celdas y poblamos las celdas con elarray, tambin vamos implementar el mtodo didSelectRowAtIndexPath: para la accin de pulsar la celda y decirle alcontrolador quin es el delegado del UINavigationController, nos quedara de esta forma;

    view plain print ?

    01. #import 02. #import "IACAnimationController.h" 03.

    04. @interface IACMasterViewController : UITableViewController 05.

    06. @property(nonatomic,strong) NSArray *transitionsTypes;

    07. @property(nonatomic, strong) idanimationController;

    08.

    09. @end

    10.

    11.

    view plain print ?

    01. - (void)viewDidLoad 02. {

    03. [super viewDidLoad]; 04. self.navigationController.delegate = self;

    05. self.transitionsTypes = @[@"Transicin modal",@"Transicin de navegacin"];

    06. }

    07.

    08. #pragma mark - Table view data source

    09.

    10. - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

    11. {

    12. // Return the number of sections.

    13. return 1; 14. }

    15.

    16. - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

    17. {

    18. // Return the number of rows in the section.

    19. return 2; 20. }

    21.

  • 1/8/14 Transiciones personalizadas en iOS7

    www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=transiciones_personalizadas_ios7 4/8

    Bien, ahora vamos a crear otro controlador en el storyboard que sea un UIViewController y colocamos una imagen defondo, y un botn en la parte inferior.

    Vamos a crear su clase y la Llamaremos ImageViewController, despus vamos a crear los Outlets para crear la accindel botn y la propiedad de la imageView, tambin vamos a indicarle al storyboard el ID de nuestro controlador;

    Vamos a indicar en el IBAction del botn que queremos hacer un DissMiss;

    view plain print ?

    01. - (IBAction)actionBack:(id)sender {

    02. [self dismissViewControllerAnimated:YES completion:NULL];

    03. }

    Ahora vamos a importar nuestro nuevo controlador y la clase ModalTransition en la clase MasterViewController y en elmtodo de seleccin de la celda haremos lo siguiente;

    -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ IACImageViewController *detailVC = [self.storyboard instantiateViewControllerWithIdentifier:@"IACImageViewController"]; detailVC.transitioningDelegate = self; switch (indexPath.row) { case 0: self.animationController = [IACModalTransition new]; [self presentViewController:detailVC animated:YES completion:nil]; break; } }

    Ahora vamos a implementar en este mismo controlador los mtodos para las transiciones modales;

    view plain print ?

    01. #pragma mark UIViewControllerAnimatedTransitioning

    02.

    03. -(id)animationControllerForPresentedController:

    (UIViewController *)presented presentingController:(UIViewController *)presenting sourceController:

    (UIViewController *)source{

    04.

    05. self.animationController.isPresenting = YES;

    06. return self.animationController; 07. }

    08.

    09. -(id)animationControllerForDismissedController:

    (UIViewController *)dismissed{

    10.

    11. self.animationController.isPresenting = NO;

    12. return self.animationController; 13. }

    Y ya por fin volvemos a la clase ModalTransition para hacer la animacin, voy a comentar el cdigo para que quedeclaro lo que vamos a ir haciendo;

    22. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:

    (NSIndexPath *)indexPath

    23. {

    24. static NSString *CellIdentifier = @"Cell"; 25. UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    26.

    27. cell.textLabel.text = [self.transitionsTypes objectAtIndex: indexPath.row];

    28.

    29. return cell; 30. }

    31.

    32. -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 33.

    34. }

    view plain print ?

    01. -(void)animateTransition:(id)transitionContext{ 02.

    03.

    04. self.transitionContext = transitionContext;

    05.

    06. if(self.isPresenting){ 07. [self animatePresenting:transitionContext];

    08. }

    09. else{ 10.

    11. [self animateDissMiss:transitionContext];

    12. }

    13.

    14. }

    15.

  • 1/8/14 Transiciones personalizadas en iOS7

    www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=transiciones_personalizadas_ios7 5/8

    16. -(void)animatePresenting:(id)transitionContext 17. {

    18. //Obtenemos los controladores del contexto

    19. UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    20. UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

    21.

    22. //obtenemos la camptura del controlador del que venimos para animar una captura en vez de una vista

    23. UIView *capture1 = [[fromViewController.view snapshotViewAfterScreenUpdates:YES] resizableSnapshotViewFromRect:CGRectMake(

    24. UIView*capture2 = [[fromViewController.view snapshotViewAfterScreenUpdates:YES] resizableSnapshotViewFromRect:CGRectMake(

    25. capture2.center = CGPointMake(capture1.center.x *3, capture1.center.y);

    26.

    27. //creamos la vista contenedora de la animacin y borro la vista del controlador del que venimos

    28. UIView *containerView = [transitionContext containerView];

    29. [fromViewController.view removeFromSuperview];

    30.

    31. //aando la vista

    32. [containerView addSubview:toViewController.view];

    33. //preparo la captura

    34. [containerView addSubview:capture1];

    35. [containerView addSubview:capture2];

    36.

    37. //seteo el estado inicial del controlador al que vamos

    38. CATransform3D scale = CATransform3DIdentity;

    39. toViewController.view.layer.transform = CATransform3DScale(scale, 0.0, 0.0, 1);

    40. toViewController.view.alpha = 0.6;

    41.

    42. // obtengo las transformaciones

    43. CATransform3D t1 = [self firstTransform];

    44. CATransform3D t2 = [self secondTransform];

    45.

    46. [UIView animateKeyframesWithDuration:self.presentationDuration

    47. delay:0.0

    48. options:UIViewKeyframeAnimationOptionCalculationModeLinear

    49. animations:^{

    50.

    51. [UIView addKeyframeWithRelativeStartTime:0.0f

    52. relativeDuration:0.5f

    53. animations:^{

    54. //animacin del fromVieController dividiendose en dos

    55. capture1.layer.transform = t1;

    56. capture1.center = CGPointMake(capture1.center.x -

    57. );

    58. capture2.layer.transform = t2;

    59. capture2.center = CGPointMake(capture2.center.x +

    60. );

    61. }];

    62.

    63. [UIView addKeyframeWithRelativeStartTime:0.5f

    64. relativeDuration:0.5f

    65. animations:^{

    66. //animacin del toVieController acercandose

    67. toViewController.view.layer.transform = CATransform3DIdentity;

    68. toViewController.view.alpha = 1.0f;

    69. }];

    70.

    71. } completion:^(BOOL finished) {

    72.

    73. [self.transitionContext completeTransition:YES];

    74.

    75. }];

    76.

    77.

    78. }

    79.

    80. -(void)animateDissMiss:(id)transitionContext 81. {

    82.

    83. //Obtenemos los controladores del contexto

    84. UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    85. UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

    86.

    87. //obtenemos la captura del controlador al que vamos, la dividimos en dos Y LA DEJAMOS YA ROTADA.

    88. UIView *capture1 = [[toViewController.view snapshotViewAfterScreenUpdates:YES] resizableSnapshotViewFromRect:CGRectMake(

    89. capture1.layer.transform = [self firstTransform];

    90. capture1.center = CGPointMake(capture1.center.x - 120, capture1.center.y);

    91. UIView*capture2 = [[toViewController.view snapshotViewAfterScreenUpdates:YES] resizableSnapshotViewFromRect:CGRectMake(

    92. capture2.center = CGPointMake(capture2.center.x *3 + 120, capture2.center.y);

    93. capture2.layer.transform = [self secondTransform];

    94.

    95. // obtengo la captura del controlador del que venimos

    96. UIView *intermediateView = [fromViewController.view snapshotViewAfterScreenUpdates:YES];

    97.

    98. //creamos la vista contenedora de la animacin y borro la vista del controlador del que venimos

    99. UIView *containerView = [transitionContext containerView];

    100. [fromViewController.view removeFromSuperview];

    101.

    102. //aando la vista las campuras

    103. [containerView addSubview:intermediateView];

    104. [containerView addSubview:capture1];

    105. [containerView addSubview:capture2];

    106.

    107. CATransform3D scale = CATransform3DIdentity;

    108.

    109. [UIView animateKeyframesWithDuration:self.presentationDuration

    110. delay:0.0

    111. options:UIViewKeyframeAnimationOptionCalculationModeLinear

    112. animations:^{

    113.

    114. [UIView addKeyframeWithRelativeStartTime:0.0f

    115. relativeDuration:0.5f

    116. animations:^{

    117.

    118. //animacin del fromViewController alejandose

    119. intermediateView.layer.transform = CATransform3DScale(scale,

    120. intermediateView.alpha = 0.6;

    121.

    122. }];

    123.

    124. [UIView addKeyframeWithRelativeStartTime:0.5f

  • 1/8/14 Transiciones personalizadas en iOS7

    www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=transiciones_personalizadas_ios7 6/8

    Si compilamos ahora veris que hace una animacin que divide en dos el controlador actual y acerca el siguiente.

    Ahora vamos a hacer una transicin para el UINavigationController, vamos a crear una clase que herede NSObjectllamada NavigationTransition y vamos a dejar nuestro .h de la misma forma que el ModalTransition;

    view plain print ?

    01. #import 02. #import "IACAnimationController.h" 03.

    04. @interface IACNavigationTransition : NSObject 05.

    06. @property (nonatomic ) BOOL isPresenting;

    07. @property (nonatomic, assign) NSTimeInterval presentationDuration;

    08. @property (nonatomic, assign) NSTimeInterval dismissalDuration;

    09. @property (nonatomic, strong) id transitionContext;

    10.

    11. -(NSTimeInterval)transitionDuration:(id)transitionContext;

    12. -(void)animateTransition:(id)transitionContext; 13.

    14.

    15. @end

    El .m vamos a dejarlo de esta forma;

    125. relativeDuration:0.5f

    126. animations:^{

    127.

    128. //animacin del toVieController uniendose de las dos partes

    129. capture1.layer.transform = CATransform3DIdentity;

    130. capture1.center = CGPointMake(capture1.center.x +

    131. );

    132. capture2.layer.transform = CATransform3DIdentity;

    133. capture2.center = CGPointMake(capture2.center.x -

    134.

    135. }];

    136.

    137. } completion:^(BOOL finished) {

    138.

    139. [self.transitionContext completeTransition:YES];

    140.

    141. }];

    142.

    143.

    144. }

    145.

    146. -(CATransform3D)firstTransform{

    147.

    148. CATransform3D transform = CATransform3DIdentity;

    149. transform.m34 = 1.0/-900;

    150. transform = CATransform3DRotate(transform, 90.0f, 0, 1, 0);

    151. return transform; 152.

    153. }

    154.

    155. -(CATransform3D)secondTransform{

    156.

    157. CATransform3D transform = CATransform3DIdentity;

    158. transform.m34 = 1.0/-900;

    159. transform = CATransform3DRotate(transform, -90.0f, 0, 1, 0);

    160. return transform; 161.

    162. }

    view plain print ?

    01. #import "IACNavigationTransition.h" 02.

    03. @implementation IACNavigationTransition

    04.

    05.

    06.

    07. -(id)init{

    08. if (self = [super init]) { 09. self.presentationDuration = 1.0;

    10. self.dismissalDuration = 1.0;

    11. }

    12. return self; 13. }

    14.

    15. -(NSTimeInterval)transitionDuration:(id)transitionContext

    16. {

    17. //determinamos el tiempo que durar la animacin

    18. return self.isPresenting ? self.presentationDuration:self.dismissalDuration; 19. }

    20.

    21. -(void)animateTransition:(id)transitionContext 22. {

    23.

    24. self.transitionContext = transitionContext;

    25. if (self.isPresenting) { 26. [self animatePresenting:self.transitionContext];

    27. }else{ 28. [self animateDissMiss:self.transitionContext];

    29. }

    30. }

    31.

    32. -(void)animatePresenting:(id)transitionContext 33. {

    34.

    35.

    36. UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

    37.

    38. UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    39.

    40. UIView *container = [transitionContext containerView];

    41.

    42.

  • 1/8/14 Transiciones personalizadas en iOS7

    www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=transiciones_personalizadas_ios7 7/8

    Esta animacin rota las vistas con un efecto de rebote muy chulo ;-).

    Ahora vamos a implementar los mtodos para que nuestro UINavigationController ejecute nuestra transicin;

    view plain print ?

    01. #pragma mark - navigationController Delegate

    02.

    03. -(id)navigationController:

    (UINavigationController *)navigationController animationControllerForOperation:

    (UINavigationControllerOperation)operation fromViewController:

    (UIViewController *)fromVC toViewController:(UIViewController *)toVC{

    04.

    05.

    06. switch (operation) { 07. case UINavigationControllerOperationPush: 08. self.animationController.isPresenting = YES;

    09. return self.animationController; 10. case UINavigationControllerOperationPop: 11. self.animationController.isPresenting = NO;

    12. return self.animationController; 13. default: return nil; 14. }

    15.

    16. }

    4. Conclusiones.

    Pues como veis se pueden hacer cosas muy chulas con las transiciones personalizadas, podis bajaros el proyecto aqu;

    43. fromViewController.view.frame = container.frame;

    44. toViewController.view.frame = container.frame;

    45.

    46. // coloco el toViewController en la aprte superior y boca abajo

    47. toViewController.view.transform = CGAffineTransformMakeRotation(-M_PI);

    48. toViewController.view.layer.anchorPoint = CGPointMake(0.5, 0.0);

    49. toViewController.view.layer.position = CGPointMake(160.0, 0);

    50.

    51. //inserto los controladores en el contenedor

    52. [container insertSubview:toViewController.view belowSubview:fromViewController.view];

    53.

    54. [UIView animateWithDuration:1.0

    55. delay:0.0

    56. usingSpringWithDamping:.8

    57. initialSpringVelocity:6.0

    58. options:UIViewAnimationOptionCurveEaseIn

    59.

    60. animations:^{

    61.

    62. toViewController.view.layer.transform = CATransform3DIdentity;

    63.

    64. fromViewController.view.center = CGPointMake(-

    container.frame.size.width, container.frame.size.height/2);

    65. fromViewController.view.transform = CGAffineTransformMakeRotation(M_PI/2);

    66.

    67. } completion:^(BOOL finished) {

    68.

    69. [transitionContext completeTransition:YES];

    70.

    71. }];

    72. }

    73.

    74. -(void)animateDissMiss:(id)transitionContext 75. {

    76.

    77. UIViewController *fromViewController = [transitionContext viewControllerForKey:UITransitionContextFromViewControllerKey];

    78.

    79. UIViewController *toViewController = [transitionContext viewControllerForKey:UITransitionContextToViewControllerKey];

    80.

    81. CGRect initialRect = [transitionContext initialFrameForViewController:fromViewController];

    82.

    83. //coloco el formViewController en el centro y le indico su punto de anclaje y la posicin desde la que rota

    84. CGAffineTransform rotation;

    85. rotation = CGAffineTransformMakeRotation(M_PI);

    86. fromViewController.view.frame = initialRect;

    87. fromViewController.view.layer.anchorPoint = CGPointMake(0.5, 0.0);

    88. fromViewController.view.layer.position = CGPointMake(160.0, 0);

    89.

    90. //inserto los controladores en el contenedor

    91. UIView *container = [transitionContext containerView];

    92. [container insertSubview:toViewController.view belowSubview:fromViewController.view];

    93.

    94. //coloco el toViewController del revs y en la parte izquierda

    95. toViewController.view.center = CGPointMake(-

    initialRect.size.width, initialRect.size.height);

    96. toViewController.view.transform = rotation;

    97.

    98.

    99. [UIView animateWithDuration:1.0

    100. delay:0.0

    101. usingSpringWithDamping:.8

    102. initialSpringVelocity:6.0

    103. options:UIViewAnimationOptionCurveEaseIn

    104.

    105. animations:^{

    106. //rotamos el controlador del que venimos hacia arriba y centramos al que vamos

    107. fromViewController.view.transform = rotation;

    108. toViewController.view.frame = initialRect;

    109. toViewController.view.transform = CGAffineTransformMakeRotation(0);

    110. } completion:^(BOOL finished) {

    111.

    112. [transitionContext completeTransition:YES];

    113.

    114. }];

    115. }

    https://github.com/iAcisclo/CustomTransitionsExample

  • 1/8/14 Transiciones personalizadas en iOS7

    www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=transiciones_personalizadas_ios7 8/8

    Esta obra est licenciada bajo licencia Creative Commons de Reconocimiento-No comercial-Sin obras derivadas 2.5

    PUSH THIS Page Pushers Community Help?

    ----no clicks + + + + + + + +

    0 people brought clicks to this page

    powered by karmacracy

    Registrate y accede a esta y otras ventajas

    Anmate y comntanos lo que pienses sobre este TUTORIAL:

    A continuacin puedes evaluarlo:

    Regstrate para evaluarlo

    Por favor, vota +1 o comprtelo si te pareci interesante

    Share |

    Copyright 2003-2014 All Rights Reserved | Texto legal y condiciones de uso | Banners | Powered by Autentia | Contacto

    http://creativecommons.org/licenses/by-nc-nd/2.5/es/http://creativecommons.org/licenses/by-nc-nd/2.5/es/http://karmacracy.com/http://www.adictosaltrabajo.com/register.phphttp://www.adictosaltrabajo.com/register.inc.phphttp://addthis.com/bookmark.php?v=250&username=xa-4bea90cb722c861ehttp://www.adictosaltrabajo.com/textolegal.phphttp://www.adictosaltrabajo.com/banners.phphttp://www.autentia.com/http://www.autentia.com/contacto.htmhttp://validator.w3.org/check/refererhttp://jigsaw.w3.org/css-validator/check/referer?warning=nohttp://www.adictosaltrabajo.com/feeds.phphttp://www.adictosaltrabajo.com/feeds.php