Анимация pushviewcontroller медленная/прерывистая - программирование

Анимация pushviewcontroller медленная/прерывистая

Я нажимаю ViewController, который содержит не так много просмотров, UIScrollView, который содержит 10 представлений внутри, у меня есть singleton ViewController и нажимайте его снова и снова, не отпуская и не выделяя снова ViewController, поэтому все вещи, которые я делаю в viewDidLoad(), и viewWillAppear(), но анимация медленная и изменчивая, что это может быть?

4b9b3361

Ответ 1

У меня возникла проблема, когда, когда UIViewController A сделал pushViewController, чтобы нажимать UIViewController B, анимация push остановится примерно на 25%, остановится, а затем переместит B в остальной части пути.

Этот DID НЕ происходит на iOS 6, но как только я начал использовать iOS 7 в качестве базового SDK в XCode 5, это начало происходить.

Исправление состоит в том, что в контроллере представления B не было набора backgroundColor в его корневом представлении (корневой вид - это тот, который является значением viewController.view, которое вы обычно устанавливаете в loadView). Исправлена ​​проблема с установкой backgroundColor в этом корневом инициализаторе.

Мне удалось исправить это следующим образом:

// 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;

}

Ответ 2

Только решение этой проблемы никогда не устанавливает цвет фона основного вида для очистки цвета.

Как ваш следующий вид, предшествующий предыдущему представлению, если вы устанавливаете фон для очистки цвета, означает, что он прозрачен, предыдущий вид всегда виден на какое-то время, что портит анимацию.

Ответ 3

Вы можете начать с использования инструментов > Time Profiler и посмотреть, есть ли какая-либо часть вашего кода, которая занимает больше времени, чем необходимо.

Вы также можете использовать инструмент "Инструменты" > "Главная анимация", который может использоваться для флага части вашего экрана, что не позволяет эффективно рисовать/оживлять.

Если вы используете старый iPhone или оригинальный iPod - со сложными экранами, я заметил некоторые приложения немного прерывистыми.

Ответ 4

У меня была эта проблема, и это было из-за старого кода в толкаемом контроллере представления, что заставило представление "затухать", установив альфа-значение на 0 в viewWillAppear и установив альфа-1 в viewDidAppear.

Я удалил старый код, который сделал это, и толчок работал нормально.

-(void)viewWillAppear {
    self.view.alpha = 0; //REMOVE THIS LINE
}

Ответ 5

Моя проблема заключается в том, что я ставил коды массовой нагрузки в viewWillAppear. Мой случай

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    tableView.reloadData()
}

И у меня много строк, поэтому pushViewController отстает.

Ответ 6

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

Сегодня я столкнулся с той же проблемой. Я вникнул в эту тему, и, похоже, это связано с тем, что основная runloop спала.

См. .

Ответ 7

В моем случае я устанавливаю код изменения пользовательского интерфейса (например, shadow And cornerRadius And...) в методе viewWillLayoutSubviews(), и когда я помещаю этот код в другие методы, такие как viewWillAppear(), этот переход становится более плавным