Acepto la primera respuesta con un par de modificaciones. Acabo de pasar por este mismo problema exacto. El problema es que cualquier elemento gráfico se moverá automáticamente a la actualización de fondo cuando tenga un código que lleve su tiempo. Tirar el spinner al fondo es lo que esencialmente hace de todos modos. Lo que quieres es (tristemente) que el código principal se ejecute en segundo plano y que el spinner se ejecute en primer plano. Sé que esto suena mal, pero en algunos casos, permitir que el código funcione un poco más lento para indicar que la aplicación está haciendo algo útil es beneficioso para el usuario.
el fin de obtener el controlador para trabajar: 1) Tome todo el código que lleva a los 3 segundos para correr, y colocarla en una función que es una función void 2) instancia su spinner pero almacenarlo a una variable a la que se puede acceder fuera de su rutina viewDidAppear. 3) Arranque un nuevo NSTimer con un funcionamiento continuo con un incremento de aproximadamente un cuarto de segundo aproximadamente. Definiré qué entra en la rutina que se llama cada ciclo más tarde. 4) Llame a la rutina que creó en el paso 1 utilizando la función performSelectorInBackground. Esto esencialmente ahora va a ejecutar su inicio (3 segundos vale) en el fondo, que es realmente la única forma de permitir que el spinner animado se muestre y realmente se anime. 5) En la rutina que creó en el paso 1, agregue una línea de código en la parte superior que actualice un booleano (global al objeto) a verdadero, indicando que estamos en el medio de nuestra rutina principal de 3 segundos. 6) Al final de la rutina definida en el paso 1, agregue una línea de código que establece el mismo valor global definido en el paso 5 en falso, lo que indica que se completó nuestra rutina de 3 segundos. 7) En la rutina de temporizador, que ahora quiere hacer algo que se parece a lo siguiente:
// If busy that start the spinner
if(YES == busy){
[spinner startAnimating];
}else{
[spinner stopAnimating];
// Here we can also stop and deallocate the timer
}
Si necesita más ayuda sobre este tema, que de hecho puede proporcionar el código exacto. Eche un vistazo a la aplicación de ejemplo que he desarrollado para Pepperdine News Group. Cuando presiona un botón, el control giratorio aparece en la parte superior derecha de la pantalla.
http://itunes.apple.com/us/app/pepperdine-graphic-for-iphone/id516343215?mt=8
¡Esto ha funcionado para mí! La última opción es la mejor, porque no tengo que crear una función para crearla para llamar a una más compleja. Tnx! ;) – jollyr0ger
Las primeras 3 opciones son actualizar la interfaz de usuario en el hilo de fondo ... – TheBlack
@Jano Muchas gracias, gran trabajo. –