iphone - framework - cocoa touch español
Agregue UIView por encima de todas las demás vistas, incluido StatusBar (3)
Estoy a punto de hacer lo mismo en breve y encontré lo siguiente
http://www.dejal.com/developer/dsactivityview
Parece que tiene todo lo que estás buscando
Quiero crear una vista (UIControl) que bloquee todas las entradas y muestre un UIActivityIndicatorView mientras se autentica a un usuario.
UIActionSheet y UIAlertView logran agregar una vista semitransparente negra sobre la parte superior de todas las otras vistas para bloquear la entrada y me gustaría hacer algo similar.
He intentado agregar mi vista a la ventana UI superior en la matriz [[aplicación UIApplication shared] windows], y aunque esto la coloca encima del UIKeyboard si está visible, no la coloca sobre la Barra de estado (lo cual tiene sentido).
Mi próximo intento fue extender UIAlertView, eliminar todas sus subvistas y establecer su layer.contents = nil, luego agregar el ActivityIndicator como una subvista. Esto funciona bien, pero parece que no puedo matar la transición anómala predeterminada de UIAlertView cuando lo llamas a "mostrar".
¿Alguien tiene alguna sugerencia sobre la mejor manera de abordar este problema que me da un control total?
Ah, y sé que la entrada de bloqueo no es buena, pero me aseguro de que sea por un corto período de tiempo y tiene el beneficio de dejar en claro al usuario que su acción, que debe completar para que progresen, se está procesando.
He profundizado más en las API y creo que lo he resuelto.
Para mostrar una vista en toda la pantalla, debe crear su propia ventana UI y establecer su propiedad windowLevel para que sea UIWindowLevelStatusBar. Luego puede agregar sus subvistas personalizadas a esta ventana.
Tenga en cuenta que Apple no alienta, pero tampoco prohíbe la creación de múltiples ventanas.
UIWindow *statusWindow = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
statusWindow.windowLevel = UIWindowLevelStatusBar;
statusWindow.hidden = NO;
statusWindow.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.7];
[statusWindow makeKeyAndVisible];
Cuando desee eliminar la ventana de la pantalla, parece que la libera de la memoria.
[statusWindow release];
Esto no se siente totalmente seguro, pero no me da ningún error y parece que lo abandona de la matriz de Windows de UIApplication. Por favor, avíseme si esto está mal.
Actualizar:
Otro problema que encontré fue que UIStatusBar no estaba tomando eventos táctiles para desplazar el UIScrollView activo a la parte superior después de que había mostrado y eliminado esta ventana de superposición. La solución fue volver a establecer la ventana principal en la ventana clave una vez que se haya liberado la superposición.
[primaryWindow makeKeyWindow];
Necesitaba presentar una vista sobre todas las otras vistas dentro de mi ventana principal. Inicialmente, pensé en presentar otra ventana en la parte superior de la ventana de mi llave. Dado que Apple desalienta el uso de varias ventanas, decidí no hacerlo.
El siguiente código me hizo el truco:
Agregué mi vista como una vista secundaria a la ventana de mi llave que automáticamente presenta mi vista sobre todas las otras vistas. En mi caso, este código está en el delegado de la aplicación
[self.window addSubview:topViewController.view]
Y cuando termine con la vista, el siguiente código lo elimina de la ventana.
[topViewController.view removeFromSuperview];