Fix orientation issues

This commit is contained in:
Arkadiusz Fal 2022-11-13 13:15:44 +01:00
parent 0049a68839
commit fe9b7c03ca
2 changed files with 14 additions and 4 deletions

View File

@ -7,11 +7,13 @@ extension VideoPlayerView {
let currentOrientation = OrientationTracker.shared.currentInterfaceOrientation
if currentOrientation.isLandscape,
Defaults[.enterFullscreenInLandscape],
!Defaults[.honorSystemOrientationLock],
!player.playingFullScreen,
!player.playingInPictureInPicture
!player.currentItem.isNil,
player.lockedOrientation.isNil || player.lockedOrientation!.contains(.landscape),
!player.playingInPictureInPicture,
player.presentingPlayer
{
guard player.presentingPlayer else { return }
DispatchQueue.main.async {
player.controls.presentingControls = false
player.enterFullScreen(showControls: false)

View File

@ -55,6 +55,7 @@ struct VideoPlayerView: View {
@State internal var isVerticalDrag = false
@State internal var viewDragOffset = Self.hiddenOffset
@State internal var orientationObserver: Any?
@State internal var orientationNotification: Any?
#endif
@EnvironmentObject<PlayerModel> internal var player
@ -144,6 +145,8 @@ struct VideoPlayerView: View {
orientationMask,
andRotateTo: orientationMask == .landscapeLeft ? .landscapeLeft : orientationMask == .landscapeRight ? .landscapeRight : .portrait
)
} else {
Orientation.lockOrientation(.allButUpsideDown)
}
}
}
@ -155,8 +158,13 @@ struct VideoPlayerView: View {
}
stopOrientationUpdates()
player.controls.hideOverlays()
}
.onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in
guard player.lockedOrientation.isNil else {
return
}
player.lockedOrientation = nil
Orientation.lockOrientation(.allButUpsideDown, andRotateTo: OrientationTracker.shared.currentInterfaceOrientation)
}
.onAnimationCompleted(for: viewDragOffset) {
guard !dragGestureState else { return }