iOS 11, завершение transitionCoordinator.animate() никогда не вызывается

Я написал FadeSegue класс, который переопределяет perform функция от своего супер, UIStoryboardSegueучебный класс.

import Foundation
import UIKit

class FadeSegue :UIStoryboardSegue{
    override func perform() {
        let screenShotView = UIImageView()
        screenShotView.image = self.source.view.screenShot
        screenShotView.frame = CGRect(x: 0, y: 0, width: self.destination.view.frame.width, height: self.destination.view.frame.height)

        self.destination.view.addSubview(screenShotView)

        super.perform()

        self.source.transitionCoordinator?.animate(alongsideTransition: nil, completion: { (c) in
            UIView.animate(withDuration: 0.3, animations: {
                screenShotView.alpha = 0
            }) { (status) in
                screenShotView.removeFromSuperview()
            }
        })
    }
}

extension UIView {
    var screenShot: UIImage?  {
        UIGraphicsBeginImageContextWithOptions(bounds.size, false, 1.0);
        if let _ = UIGraphicsGetCurrentContext() {
            drawHierarchy(in: bounds, afterScreenUpdates: true)
            let screenshot = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return screenshot
        }
        return nil
    }
}

когда Animates флажок будет снят в Attribute Inspector, Этот код будет хорошо работать в iOS 10. Но в iOS 11, completion блок из transitionCoordinator.animate никогда не будет вызываться, и затухающая анимация остановится в середине своего прогресса.

Я не могу узнать, что не так в моем коде для iOS 11.

0 ответов

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