Анимация перехода UIView не выполняется
Я пытаюсь использовать анимацию перехода, когда UIView появляется на экране. UIView отображается правильно, но анимация не появляется, когда он появляется.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let coreView = UIView(frame: CGRect(x: 10, y: 10, width: 100, height: 100))
coreView.backgroundColor = UIColor.cyan
coreView.layer.borderColor = UIColor.darkGray.cgColor
coreView.layer.borderWidth = 8
coreView.layer.cornerRadius = 15
coreView.isHidden = true
self.view.addSubview(coreView)
//The transition occurs here
UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: {
coreView.isHidden = false
}, completion: {_ in})
}
3 ответа
Это не работает, потому что coreView не настроен должным образом до тех пор, пока не завершится метод viewWillAppear, поэтому вы не сможете использовать анимацию перехода (вы можете анимировать другие свойства, такие как альфа).
Что вы можете сделать, это:
DispatchQueue.main.async {
coreView.isHidden = false
UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: {
}, completion: {_ in})
}
Это отправляет переход обратно в основную очередь, и он запускается после завершения метода viewWillAppear и правильной настройки coreView.
Кстати, помните, что viewWillAppear вызывается всякий раз, когда контроллер представления появляется в представлении, поэтому, если он скрывается и возвращается, вы добавите еще один coreView.
Вместо того, чтобы манипулировать свойством isHidden в coreView, используйте свойство alpha.
Попробуйте заменить coreView.isHidden = true на coreView.alpha = 0 и в блоке анимации замените coreView.isHidden = false на coreView.alpha = 1
Наверное, так и должно быть. Это должно оживить. Благодарю.
Переместите код перехода на viewDidAppear
override func viewDidAppear(_ animated: Bool) {
//The transition occurs here
UIView.transition(with: coreView, duration: 2, options: [.curveEaseInOut, .transitionCurlDown], animations: {
coreView.isHidden = false
}, completion: {_ in})
}
Попробуйте добавить self.view.layoutIfNeeded()
после вашего coreView
скрытие кода в блоке анимации.