Pantalla salpicada con códigos pesados ​​en monotouch

Ahora que en monotouch y para la aplicación iPhone / iPad cuando queremos tener una pantalla de bienvenida antes del almuerzo de la aplicación, debemos establecer la image de inicio en el file info.plist y mostrará esta image antes de que se abra la aplicación.

Pero, ¿cuál es la mejor manera de implementar una pantalla de bienvenida cuando queremos tener un toque que ejecuta algunos códigos pesados ​​en segundo plano y no desaparece hasta que estas operaciones no se hayan completado? Algunos códigos, como la descarga de la configuration de la aplicación desde Internet y el tema de ahorro que a menudo se utiliza en la pantalla de bienvenida.

Por cierto, hay otra solución: cree UIViewController principal, Window.RootViewController como Window.RootViewController inmediatamente en el método FinishedLaunching de AppDelegate. Luego, cree y muestre splashViewController por este código:

  ... MainViewController.PresentModalViewController(splashViewController, true); ... 

Es posible ocultar el UIViewController modal mediante el código de llamada:

  DismissModalViewControllerAnimated(true); 

Tenga en count que desde iOS 6 PresentModalViewController convierte en un método en desuso. Por lo tanto, para muchas versiones de iOS, la compatibilidad podría codificar un método especial para mostrar UIViewController modal.

  public void ShowModalViewController (UIViewController vc, bool animated) { if (UIDevice.CurrentDevice.CheckSystemVersion(6, 0)) { MainViewController.PresentViewController(vc, animated, null); } else { MainViewController.PresentModalViewController(vc, animated); } } 

Solución posible:

  • Cree un SplashViewController , que contiene la misma image que la image de bienvenida de la aplicación. También contiene UIActivityIndicatorView ;
  • En el método FinishedLaunching de AppDelegate SplashViewController nueva instancia de SplashViewController , window.RootViewController como window.RootViewController , llama:
 activityIndicator.StartAnimating(); 
  • Ejecuta algunos códigos pesados ​​en segundo plano;
  • Cuando haya terminado, configure window.RootViewController para ViewController, que es el punto de inicio de la aplicación.