puede modificar la estructura del controlador de vista, pero si usted está utilizando -presentModalViewController de UIViewController: animada: método, la vista detrás se descarga una vez que su punto de vista modal se terminó la animación en la pantalla (Esto supone estás en un iPhone) y verás una pantalla blanca donde debería estar tu vista de fondo. iOS asume que su controlador de vista modal será un controlador de vista de pantalla completa y volcará la otra vista para ahorrar memoria.
Si realmente desea mostrar una vista sobre parte de la pantalla, en su lugar debe agregar UIView (no UIViewController) a la vista actual de UIViewController como subvista, y luego animarla en pantalla usted mismo. Creo que algo así iba a trabajar en su clase UIViewController que presentará la vista:
// Add the view as a subview and position it offscreen just below the current view
UIView *myHalfView = [[UIView alloc] initWithFrame:someAppropriateFrame];
[self.view addSubview:myHalfView];
CGRect offScreenFrame = myHalfView.bounds;
offScreenFrame.origin = CGPointMake(0.0, CGRectGetMaxY(self.view.frame));
// Now animate the view upwards
[UIView beginAnimations:nil context:nil];
// Move the view upwards the height of your sliding view so it's entirely onscreen
myHalfView.center = CGPointMake(myHalfView.center.x, myHalfView.center.y - myHalfView.bounds.size.height);
[UIView commitAnimations];
[myHalfView release];
Para los puntos de bonificación, que podría desaparecer de la vista en estableciendo
myHalfView.alpha = 0.0;
antes de que el bloque de animación UIView, y configuración
myHalfView.alpha = 1.0;
dentro del bloque después de animar el centro de la propiedad.
Cuando haya terminado, puede hacer algo similar, pero a la inversa para deslizar la vista fuera de pantalla. Puede agregar un selector animationDidStop al bloque de animación UIView para que se le notifique cuando la vista se haya deslizado fuera de la pantalla para que pueda eliminarla de la jerarquía de vistas.
Desde un punto de vista estético, también debe tener cuidado al hacer esto, ya que tener una vista hacia arriba es un comportamiento estándar, y si su vista se ve como una vista normal pero se detiene, los usuarios pueden sentir (incluso brevemente) que la aplicación se ha congelado. Lo resolverán, pero dejará un mal presentimiento sobre tu aplicación si no se maneja con cuidado. Principalmente, evitaría el uso de señales estándar de pantalla completa, como la inclusión de un UINavigationController en la parte superior de su vista para ayudar a los usuarios a comprender lo que está sucediendo. Las medias láminas tienden a ser UIActionSheets en el iPhone, así que piensa en esa dirección.
Esto hace que funcione en iPad. –
+1, buena solución! Solo uno rápido: a la última línea le falta un paréntesis izquierdo "[". – pille
¡Buena captura, gracias! – atticus