2

У меня есть приложение на основе UINavigationController с несколькими представлениями в нем.UINavigationController popViewControllerAnimated вялый переход

Я вижу небольшой вялый переход, пока я возвращаюсь к предыдущему контроллеру представления, вызывая метод ниже на навигационном контроллере. Единственная причина, по которой я могу думать об этом в viewWillAppear моего контроллера представления, к которому я перехожу, я делаю небольшой тяжелый материал, который занимает чуть больше секунды. Есть ли способ сделать переход в таком случае немного быстрее?

[self.navigationController popViewControllerAnimated:YES]; 

EDIT: Несколько важных вещей:

  1. Я бегу на устройстве.
  2. Я пробовал комментировать весь код из viewWillAppear, но я получаю то же поведение.
  3. Задержка наблюдается только в iOS 7. Пробовал в iOS 6 и, похоже, там работает нормально.
+0

попробуйте профилировать свое приложение с помощью Time Profiler in Instruments и вернуться с более –

ответ

0

Две вещи ...

1) Вы используете тренажер? Вы управляете Mavericks? У меня возникли серьезные проблемы с производительностью при обновлении.

2) Когда дело доходит до контроллеров просмотра ... Я стараюсь как можно больше не видеть видение. Переопределите функцию init и выполняйте большую часть своей инициализации. Таким образом, он начинается раньше и не называется в любое время. Должны быть введены только те вещи, которые нужно вызывать каждый раз, когда появляется контроллер, и этот метод должен быть тощим.

+0

Ну, я бегу на устройстве, и я пробовал комментировать весь код из viewWillAppear, но я получаю такое же поведение. – Abhinav

+0

Хорошо, тогда это звучит как что-то еще. Например, вы назначаете кучу контроллеров представлений для этого контроллера навигации. Вы должны выделять их только один раз. Кроме того, есть вероятность, что если у вас есть еще один фрагмент кода, который делает что-то интенсивное асинхронно, это может повлиять на все приложение. – GregP

+0

Да, вы правы. Я инициализирую несколько контроллеров view, потому что все они находятся в UIScrollView, и мы разрешаем им горизонтальное прокручивание. Таким образом, любое временное решение, поддерживающее требуемые контроллеры view? – Abhinav

0

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

Если эти операции связаны с пользовательским интерфейсом, установите таймер на 0,3 секунды, пока не завершится переход, а затем выполните действия, связанные с UI, когда срабатывает таймер (после завершения анимации).

+0

Я попытался вызвать задержку в 0,3 секунды для всех моих действий viewWillAppear, но у меня такое же поведение. – Abhinav

2

Я мог бы быть поздний но для Googlers, которые получают здесь: Если вам посчастливиться иметь изменчивый опыт пользователя при выходе контроллера с модными вещами UI, как полномасштабное фоновым изображение вида попробуйте добавить следующее

#import <QuartzCore/QuartzCore.h> 
... 
-(void)viewWillDisappear:(BOOL)animated{ 
    self.view.layer.shouldRasterize = YES; 
    self.view.layer.rasterizationScale = [UIScreen mainScreen].scale; 
} 

Он будет выравнивать слой ур, чтобы его было легче обрабатывать.

EDIT: Или если ур действительно отчаянным:

UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0); 
[self.view drawViewHierarchyInRect:self.view.bounds afterScreenUpdates:YES]; 
UIImage *snapshot = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 
UIImageView *fakeBackground = [[UIImageView alloc] initWithImage:snapshot]; 
[[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
[self.view addSubview:fakeBackground]; 
13

Я знаю, что я тоже немного опоздал на вечеринку, но у меня была очень похожая проблема, когда я имел заголовок изображения занимают всю ширину , что когда выскочил, это вызвало неприятный дурной эффект на мнение, которое было вытолкнуто.

Мое исправление было довольно простым. Мне нужно было только убедиться, что верхний уровень View обрезает Subviews. Поскольку мой вид был разработан в интерфейсе Builder, это было просто вопрос выбора контейнера внешнего вида (тот, у которого толстая рамка) и проверка опции «Подхваты клипов».

+0

Спасибо, это исправило мою проблему. – nithinreddy

+0

Спасибо @SolidRegardless, я работал безупречно. –

+0

Спасибо @ SolidRegardless, Он работал как магия –

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