Как предотвратить вмешательство макета в текущую анимацию UIViewIOS

Программируем под IOS
Ответить
Anonymous
 Как предотвратить вмешательство макета в текущую анимацию UIView

Сообщение Anonymous »

Я пытаюсь выяснить, как можно предотвратить вмешательство макета представлений в текущую анимацию того же представления.
В моем приложении есть панель вкладок в нижней части экрана, управляемая UITabBarController. В определенных ситуациях панель вкладок должна анимировать скольжение вниз и из поля зрения. Это отлично работает с кодом, похожим на следующий тестовый код (menuController — это UITabBarController).

Код: Выделить всё

UIView.animate(withDuration: 2, delay: 0, options: .curveEaseIn) {
var frame = self.menuController.tabBar.frame
frame.origin.y += frame.size.height
self.menuController.tabBar.frame = frame
} completion: { finished in
self.menuController.tabBar.isHidden = true
}
Но в некоторых случаях полностью независимый контроллер представления отображается в виде всплывающего окна во время анимации. Это портит анимацию; панель вкладок внезапно немного подпрыгивает вверх и продолжает двигаться вниз.
Я определил, что вероятная причина в том, что что-то вызывает новый макет панели вкладок, хотя я не знаю, как и почему это происходит в полной версии приложения. Я могу смоделировать эффект, самостоятельно запустив макет в тестовом коде:

Код: Выделить всё

DispatchQueue.main.asyncAfter(deadline: .now() + 0.5, execute: {
self.menuController.view.setNeedsLayout()
})
Итак, мой вопрос: как я могу предотвратить вмешательство макета в анимацию и/или предотвратить создание макета во время анимации.


Подробнее здесь: https://stackoverflow.com/questions/798 ... -animation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»