2016-12-26 3 views
0

У меня возникли проблемы с созданием пользовательского segue с помощью быстрых 3 и iOS 8. Я пытаюсь перейти между контроллерами представлений, затухая от одного VC до черного экрана и затем исчезать от черного до моего второго VC , Я попытался реализовать segue, создав пользовательский segue, используя код ниже, но он не работает так, как мне бы хотелось. Моя цель состоит в том, чтобы выполнить анимацию, когда черный квадрат идет от 0,5 альфа до 1,0 альфа, затем представит мой второй контроллер представлений, затем установите черный квадрат с 1.0 alpha обратно в 0.5 alpha и удалите его. Прямо сейчас, он выполняет первую часть правильно, но после окончания анимации вы можете увидеть первый VC в течение короткого момента до появления второго VC. Как мне изменить свой код, чтобы сделать переход более плавным и получить желаемый результат?Пользовательский Segue Class UIView Animation Issue

override func perform() { 
    let sourceVC = self.source 
    let destinationVC = self.destination 

    let square = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)) 
    square.alpha = 0.5 
    square.backgroundColor = UIColor.black 
    sourceVC.view.addSubview(square) 

    UIView.animate(withDuration: 0.2, animations: { 
     square.alpha = 1.0 
    }) 

    UIView.animate(withDuration: 0.2, delay: 0.2, animations: { 
     square.alpha = 0.5 
    }) { (finished) in 
     sourceVC.present(destinationVC, animated: false, completion: nil) 
    } 
} 

ответ

0

Обновить код, как показано ниже и попробуйте:

UIView.animate(withDuration: 0.2, animations: { 
     square.alpha = 1.0 

UIView.animate(withDuration: 0.2, delay: 0.2, animations: { 
        square.alpha = 0.5 
       }) { (finished) in 

    DispatchQueue.main.async { 
     sourceVC.present(destinationVC, animated: false, completion: nil) 
    } 
    }) 
    } 
+0

Просто обновленный ответ попробовать и дайте мне знать, если не исправить. –

+0

хорошо исправлена ​​старая проблема, но теперь вторая часть анимации, похоже, не запускается. Черный квадрат переходит в 1.0 alpha, а затем, кажется, исчезает, и вместо этого появляется destinationVC. –

+0

Запишите всю задачу обновления пользовательского интерфейса в этом блоке DispatchQueue.main.async {} как обновление альфа и т. Д. –