2009-01-09 5 views
38

? En mi aplicación de iPhone, he puesto un UIBarBUtton de tipo UIBarButtonSystemItemTrash en mi UIToolBar. Cuando me presionen, me gustaría replicar la animación de Mail.app: se abre el contenedor, el UIView se pliega y vuela hacia él.
¿Hay alguna forma de acceder a esta animación mediante el iPhone SDK?¿Cómo puedo replicar la animación de correo basura de Mail.app

Actualmente estoy utilizando una animación personalizada, pero hay algunos límites; por ejemplo, no puedo animar el contenedor en sí. ¿Tiene alguna sugerencia? ¿Muestras de código?

Saludos,
Davide

+8

Así que, amigos: ¿Cómo hacer eso sin API privada? – dontWatchMyProfile

+0

Hi nutsmuggler si estoy intentando la misma animación no estoy obteniendo cómo doblar la curva mientras se mueve ...... si es posible díganos cómo hacerlo –

+3

@jeeva jaja me gusta cómo casualmente mencionas su nombre –

Respuesta

34

Usa el tipo suckEffect en una animación. También: spewEffect, genieEffect, unGenieEffect, twist, tubey, swirl, cameraIris, cameraIrisHollowClose, cameraIrisHollowOpen, rippleEffect, charminUltra, zoomyIn y zoomyOut. No funciona en el simulador

CATransition *animation = [CATransition animation]; 
animation.type = @"suckEffect"; 
animation.duration = 2.0f; 
animation.timingFunction = UIViewAnimationCurveEaseInOut; 
view.opacity = 1.0f; 
[view.layer addAnimation:animation forKey:@"transitionViewAnimation"]; 

Nota: Código fragmento fue sacado de una base de código más grande. Espero que funcione :)

+15

Esto está usando una API privada. No se sorprenda si Apple rechaza su aplicación por incluir esos efectos, y especialmente no se sorprenda si su aplicación comienza a comportarse de manera extraña después de una actualización del sistema operativo. Recomiendo encarecidamente que te mantengas alejado de esto. –

+0

Sí, es una API privada y no está respaldada por completo. Sin embargo, la alternativa para los tipos de animación desconocidos es un efecto de fundido, por lo que es seguro usarlo para el desarrollo interno o abrir la cadena de herramientas. La aprobación de la App Store es una mezcla de API privadas, pero dudo que rechacen este uso. – rpetrich

+0

¡nunca se sabe qué aplicación podría rechazar Apple y por qué! ¡Por qué, también permitieron que algunas grandes compañías usen API privadas! – lostInTransit

10

Por desgracia, creo que esto va a tener que ser una animación totalmente personalizado. El plegado de UIView se puede aproximar utilizando Core Animation, tal vez agregando perspectiva al CATransform3D de la capa subyacente de UIView para distorsionar el UIView en un trapezoide que queda atrapado en el bote de basura.

En cuanto a la papelera, puede crear un UIBarButtonItem utilizando initWithCustomView :, que podría permitirle insertar una UIView personalizada que tenga una papelera animable. Parece que el bote de basura tiene dos elementos, la base de la lata y la tapa, que se rotan de forma independiente para abrir y cerrar la lata. Dibuje PNG para ambos, cree UIImageViews para ellos y conviértelos en subvistas de la vista personalizada UIBarButtonItem. Para abrir y cerrar, aplique transformaciones rotacionales para animar las subvistas.

+1

Temía obtener esta respuesta :) Una cosa que me preocupa es que la replicación de las aplicaciones de Apple sea demasiado cercana uno podría obtener su aplicación rechazada por la acusación de usar una API privada. Además, no me siento cómodo agarrando el cubo de Apple y retocándolo, pero tal vez solo soy un gato asustado. – nutsmuggler

+4

No tiene nada que temer si está creando su propia implementación a partir de interfaces publicadas. Es posible que obtenga un rechazo inicial, pero ellos escucharán su respuesta y terminarán aprobándolo. Francamente, los informes sobre el rechazo completo son demasiado exagerados. –

+1

Eso es cierto (tal vez una respuesta muy tardía) .. la mayoría de las aplicaciones terminan en la tienda de una forma u otra. – Jake

11

sólo para añadir algo de información:

  1. puede utilizar "suckEffect" con la norma +[UIView setAnimationTransition:forView:cache:]. Simplemente pase el número 103 a la variable animationTransition. Esto no evitará que su aplicación sea rechazada por Apple: p
  2. "spewEffect", "genieEffect", "unGenieEffect", etc. ya no existen en iPhoneOS 3.x. La única transición no documentada que queda es "cubo" (-), "efecto ondulación" (110), los tres efectos "cámara iris" (105,106,107) y "succión efecto" (103).

Ver http://www.iphonedevwiki.net/index.php?title=UIViewAnimationState para más detalles.

Además, para animar el contenedor (con API privada): http://www.iphonedevwiki.net/index.php?title=UIToolbar#Animating_the_trash_can_icon.

+0

Gracias, muy buena sugerencia! – nutsmuggler

4

No estoy seguro de si esta es una respuesta, pero here es lib que tiene "genie effect" por lo que es bastante similar a lo que desea lograr.

CGRect endRect = CGRectMake(30, 40, 50, 60); 
[view genieInTransitionWithDuration:0.7 
        destinationRect:endRect 
        destinationEdge:BCRectEdgeTop 
         completion:^{ 
          NSLog(@"I'm done!"); 
          }]; 

Genie IN

Cuestiones relacionadas