Анимация перехода 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 скрытие кода в блоке анимации.

Другие вопросы по тегам