2

Основной вид моего приложения - просмотр камеры UIImagePickerController. Когда приложение становится активным (в файле didBecomeActive), я представляю контроллер модального представления, который показывает некоторые параметры, сгенерированные из сетевого запроса. (Обратите внимание, что для целей отладки я взял сетевой запрос, и в настоящее время я просто показываю фиктивный вид)Почему простой контроллер модального просмотра отстает при его представлении и увольнении?

Модальный вид анимируется плавно, но после загрузки он замерзает на 3 секунды, а затем отвечает нормально. После отклонения представления (также плавно анимируется) мой контроллер выбора изображения останавливается на 2 секунды, а затем возобновляется нормально.

Я удалил всю функциональность с модульного контроллера, чтобы убедиться, что не было никаких операций, забивающих основной поток. Я представляю самые основные контроллеры и все еще получаю прерывистый ui. Я бы заподозрил, что это из моего контроллера представления, вызывающего viewDidLoad/Unload или что-то подобное, но мой поиск не дал мне никакой информации о том, какие методы делегата вызывают в представлении контроллера представления, когда отображается модальное представление.

Моей проблема может быть решена, ответив:

  • Каких метод делегата называется в ведущем, когда отображаются модальный вид?
  • (Если есть) Как я могу не называть эти методы или сделать их более гладкими?
  • Какие распространенные ошибки связаны с модульными контроллерами?
+0

Can вы добавляете код, в котором вы представляете этот контроллер вида. Трудно сказать что-то, не видя кода – Roma

+0

Мой 'presentViewControllerAnimated: complete:' является единственным в моей функции 'didBecomeActive' моего главного контроллера. В моем viewDidLoad много инициализаций и много освобождений в viewDidUnload ... Вот почему я пытаюсь их игнорировать при представлении контроллера модального вида – user

ответ

2

Возможно, это связано с тем, что вы делаете большую обработку в основном потоке (обычно, когда пользовательский интерфейс останавливается, это происходит из-за обработки основного потока). Постарайтесь предоставить нам некоторый код, в частности тот, который, по вашему мнению, является самым тяжелым кодом обработки! Извините за мой бедный английский: P! Попробуйте диспетчерскую наиболее тяжелый код на другой поток с

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    //your heavy code here =) 
}); 

С уважением, Лукасом

1

Существует несколько методов, вызываемых. ViewDidLoad ViewWillAppear ViewDidAppear ViewWillDisappear ViewDidDisappear. Проверьте все эти методы. Кроме того, проверьте все созданные подпроекты и посмотрите, делают ли они что-либо в своем потоке, включающем загрузку изображений в указанные мной методы. Также это происходит в симуляторе, а также в тестовом устройстве?

ModalViewControllers не имеют слишком много ошибок, но понимают, сколько просмотров распределено на вещи, такие как стеки стеков и сколько просмотров у вас на вершине друг друга. Когда вы избавитесь от modal viewcontroller, вы вызываете функцию rejectviewcontroller?

+0

Да, я вызываю 'rejectViewControllerAnimated: completion: nil'. Вы знаете какой-либо (простой) способ приостановить эти методы делегатов при представлении модального представления? – user

+0

@user, не должно быть необходимости приостанавливать эти методы, если вы не делаете в них что-то медленное. Вероятно, они не являются причиной вашей проблемы. – rdelmar

0

Одна вещи, которая может быть вкладчиком в некоторый незначительный лаг перегрузочный тот же ViewController с нуля каждый раз.

BProfileTableViewController * _profileViewController = [[UIStoryboard storyboardWithName:@"Profile" bundle:[NSBundle chatUIBundle]] instantiateInitialViewController]; 
UINavigationController * profileNavigationController = [[UINavigationController alloc] initWithRootViewController:profileViewController]; 
[self.navigationController presentViewController:profileNavigationController animated:YES completion:nil]; 

Здесь можно увидеть, что если это на Tableview нажмите затем каждый раз, когда приложение необходимо снова создать ViewController. Если вместо этого мы просто повторно используем представление, тогда он избавится от некоторой задержки.

Добавьте это в заголовочном файле

BProfileTableViewController * _profileView; 

Тогда модальные изменения кода вид нагрузки на:

// Open the users profile 
if (!_profileView) { 
    _profileView = [[UIStoryboard storyboardWithName:@"Profile" bundle:[NSBundle chatUIBundle]] instantiateInitialViewController]; 
} 

UINavigationController * profileNavigationController = [[UINavigationController alloc] initWithRootViewController:_profileView]; 
[self.navigationController presentViewController:profileNavigationController animated:YES completion:nil]; 

Это означает, что мы просто перезагрузить вид вместо воссоздавать вид

Смежные вопросы