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.