2009-04-07 8 views
12

Quiero tener una vista en una ventana y en respuesta a un mensaje (clic de botón o menú) Quiero que otra vista se deslice hacia abajo , y tener la primera vista cambiar el tamaño.Cómo puedo deslizar una vista dentro y fuera de una ventana en un programa Cocoa

quiero ir de esta:

********************************** 
*        * 
*--------------------------------* 
*|        |* 
*|  view 1    |* 
*|        |* 
*--------------------------------* 
*        * 
********************************** 

a esto:

********************************** 
*        * 
*--------------------------------* 
*|  view 2    |* 
*--------------------------------* 
*--------------------------------* 
*|  view 1    |* 
*--------------------------------* 
*        * 
********************************** 

No estoy necesariamente en busca de código, una idea de por dónde empezar sería apreciada.

Esto es para una aplicación de escritorio.

Respuesta

19

CoreAnimation es definitivamente su mejor apuesta. Ha sido un tiempo desde que he trabajado con cualquier código CA, sino algo así como:

[UIView beginAnimations:@"slideOn" context:nil]; 

firstView.frame = shrunkFirstViewRect; // The rect defining the first view's smaller frame. This should resize the first view 

secondView.frame = secondViewOnScreenFrame; // This should move the second view on the frame. 

[UIView commitAnimations]; 

Más tarde, se podría volver a una única vista usando:

[UIView beginAnimations:@"slideOff" context:nil]; 

firstView.frame = normalFirstViewRect; // The rect defining the first view's normal frame. This should expand the first view. 

secondView.frame = secondViewOffScreenFrame; // Move the second view off the screen 

[UIView commitAnimations]; 

Editar: El código anterior es para el iPhone, leo tu pregunta un poco rápido.

En el Mac, usted desea utilizar (de forma similar):

[NSAnimationContext beginGrouping]; 
[[NSAnimationContext currentContext] setDuration:1.0f]; // However long you want the slide to take 

[[firstView animator] setFrame:shrunkFirstViewRect]; 

[[secondView animator] setFrame:secondViewOnScreenFrame]; 

[NSAnimationContext endGrouping]; 
+2

sólo está disponible en el iPhone, no el Mac. En la Mac, necesitaría usar NSAnimationContext para la agrupación y cadaView.animator.frame en lugar de cadaView.frame. –

+0

Buena llamada, no capte la nota en la parte inferior. Respuesta actualizada, gracias! –

+0

Gracias a todos. Lo probaré. – Abizern

1

Nunca lo he intentado, pero creo que CoreAnimation tiene características interesantes para esto. Tienes que animar la altura de la vista1 desde la altura total hasta la mitad de la altura y la posición de la vista 2 desde fuera de su supervista hasta la mitad superior.

2

Debe tenerse en cuenta si no se establece una duración para el bloque de animación, el valor predeterminado es de aproximadamente 0,25 segundos, lo cual de hecho parece funcionar muy bien en la mayoría de los casos.

Sugiero probar con esa duración primero siempre que experimente con CoreAnimation.

0

Alternativamente, puede intentar una UIKit NSSplitView ...

Cuestiones relacionadas