uiviewcontroller - La animación del pushviewcontroller es lenta/entrecortada
uinavigationcontroller (6)
ViewController
un ViewController
que no contiene demasiadas vistas, UIScrollView
que contiene 10 vistas en el interior, tengo un singleton ViewController
y lo ViewController
y otra vez sin liberar y asignar nuevamente el ViewController
, así que todo lo que hago en viewDidLoad()
, y viewWillAppear()
, pero la animación es lenta y entrecortada, ¿qué podría ser?
La única solución a este problema, nunca establezca el color de fondo de la vista principal para borrar el color.
Como su próxima vista sobre la vista anterior, si configura el fondo para borrar el color, significa que es transparente, la vista anterior siempre estará visible durante algún tiempo y que estropeará la animación.
Este puede ser el error conocido discutido en el enlace y la respuesta a continuación. Tuve un problema similar y leer la respuesta a continuación me lo aclaró.
Me he encontrado con el mismo problema hoy. Me metí en el tema y parece que está relacionado con que el runloop principal está dormido.
Ver this
Mi problema es que pongo los códigos de carga masiva en viewWillAppear
. Mi caso es
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
tableView.reloadData()
}
Y tengo muchas filas, por lo que pushViewController está retrasado.
Puede comenzar utilizando Instruments> Time Profiler y ver si hay alguna parte de su código que esté tardando más de lo necesario.
También puede usar la herramienta Instrumentos> Animación principal que se puede usar para marcar partes de su pantalla que no dibujan / animan de manera eficiente.
Si estás usando un iPhone antiguo o un iPod original, con pantallas complejas, he notado que algunas aplicaciones están un poco entrecortadas.
Tuve este problema, y se debió a un código antiguo en el controlador de vista insertado, lo que provocó que la vista se "desvaneciera", configurando el alfa en 0 en la vista. Aparecerá y el alfa en 1 en viewDidAppear.
Quité el código antiguo que hacía esto y el empuje funcionó bien.
-(void)viewWillAppear {
self.view.alpha = 0; //REMOVE THIS LINE
}
Tuve un problema en el que cuando UIViewController A hizo un pushViewController para empujar UIViewController B, la animación de empuje se detendría en aproximadamente el 25%, se detendría y luego deslizaría B en el resto del camino.
Esto NO sucedió en iOS 6, pero tan pronto como comencé a usar iOS 7 como el SDK básico en XCode 5, esto comenzó a suceder.
La solución es que el controlador de vista B no tenía un color de fondo establecido en su vista raíz (la vista raíz es la que tiene el valor de viewController.view, que normalmente se establece en loadView). Establecer un backgroundColor en el inicializador de la vista raíz solucionó el problema.
Me las arreglé para solucionar esto de la siguiente manera:
// CASE 1: The root view for a UIViewController subclass that had a halting animation
- (id)initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame])) {
// Do some initialization ...
// self.backgroundColor was NOT being set
// and animation in pushViewController was slow and stopped at 25% and paused
}
return self;
}
// CASE 2: HERE IS THE FIX
- (id)initWithFrame:(CGRect)frame
{
if ((self = [super initWithFrame:frame])) {
// Do some initialization ...
// Set self.backgroundColor for the fix!
// and animation in pushViewController is no longer slow and and no longer stopped at 25% and paused
self.backgroundColor = [UIColor whiteColor]; // or some other non-clear color
}
return self;
}