Ich habe eine benutzerdefinierte Ansicht Controller, die Vollbild mit einer Schaltfläche gehen kann. Es ist normalerweise eine Unteransicht einer Ansicht (eingebettet). Das ist mein aus einbetten Vollbild einzugeben:Choppy fullscreen exit Übergang
private func enterFullScreenFromEmbed() {
self.proxyView = UIView(frame: self.view.frame)
self.proxyView?.isHidden = true
self.proxyView?.autoresizingMask = self.view.autoresizingMask
self.view.superview?.addSubview(self.proxyView!)
// Now set the frame to the screen frame
let frame = self.view.window?.convert(self.view.frame, from: self.proxyView?.superview)
self.view.window?.addSubview(self.view)
self.view.frame = frame!
self.isFullscreen = true
UIView.animate(withDuration: 0.25) {
self.view.frame = self.view.window!.bounds
self.view.layoutIfNeeded()
self.setNeedsStatusBarAppearanceUpdate()
}
}
Und von Vollbild Verlassen:
private func exitFullScreenToEmbed() {
let frame = self.view.window?.convert(self.view.frame, to: self.proxyView?.superview)
self.proxyView?.superview?.addSubview(self.view)
self.view.frame = frame!
self.isFullscreen = false
UIView.animate(withDuration: 0.25, animations: {
self.view.frame = self.proxyView!.frame
self.view.layoutIfNeeded()
self.setNeedsStatusBarAppearanceUpdate()
}) { (_) in
self.proxyView?.removeFromSuperview()
self.proxyView = nil
}
}
Dies funktioniert gut, außer dass ich die Statusleiste in der Eingabe Vollbild-Animation zu verbergen, und zeigen Sie es in der Abfahrt Vollbild-Animation Dadurch springt meine Draufsicht zurück, ohne zu animieren.
Hinweis: Die Variable isFullscreen
verbirgt die Statusleiste.
override var prefersStatusBarHidden: Bool {
return isFullscreen
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return .slide
}
Hier sind Gifs der Animationen:
Beachten Sie die obere der beiden und der Boden der Landschaft ein (einfacher auf die Landschaft zu sehen). Oben wird der Spieler-Frame sofort auf die alte Position gesetzt, und das bewegt alles um 20px (oder wie hoch die Statusleiste ist)
Es hat etwas mit der versteckten Statusleiste zu tun. Hat jemand eine Lösung?