我正在播放使用AVPlayer的視頻,這是我的應用程序中大約320x200的幀。 avplayer還有一個自定義的「全屏」按鈕,如youtube應用播放器。我如何實現它,以便當應用程序處於肖像模式並且用戶單擊全屏按鈕時,視頻將旋轉至全屏但處於橫向模式?我嘗試使用轉換,它部分工作,因爲當它在全屏模式下,如果用戶切換設備爲縱向; avplayer框架突然改變。我希望它能像YouTube應用一樣工作,即在全屏模式下,即使用戶旋轉設備,也應該保持這種狀態。關閉全屏後,只能恢復原始尺寸。由於應用程序的設計,我不想使用avplayerviewcontroller。預先感謝您的幫助。AVPlayer強制全屏風景模式
回答
偉大的問題!允許AVPLayerLayer進入全屏顯示非常重要。相當數量的應用程序配置爲單個視圖處理縱向和橫向,只是爲了顯示全屏視頻?請。
變換和幀操作可以解決這個問題:
extension CGAffineTransform {
static let ninetyDegreeRotation = CGAffineTransform(rotationAngle: CGFloat(M_PI/2))
}
extension AVPlayerLayer {
var fullScreenAnimationDuration: TimeInterval {
return 0.15
}
func minimizeToFrame(_ frame: CGRect) {
UIView.animate(withDuration: fullScreenAnimationDuration) {
self.setAffineTransform(.identity)
self.frame = frame
}
}
func goFullscreen() {
UIView.animate(withDuration: fullScreenAnimationDuration) {
self.setAffineTransform(.ninetyDegreeRotation)
self.frame = UIScreen.main.bounds
}
}
}
設置AVPlayerLayer的改變它的父的幀的幀。將原始幀保存在視圖子類中,以將AVPLayerLayer最小化到原來的位置。這允許自動佈局。
重要 - 只有當玩家處於視圖子類中心時纔有效。
不完整的例子:
class AVPlayerView: UIView {
fileprivate var avPlayerLayer: AVPlayerLayer {
return layer as! AVPlayerLayer
}
fileprivate var hasGoneFullScreen = false
fileprivate var isPlaying = false
fileprivate var originalFrame = CGRect.zero
func togglePlayback() {
if !hasGoneFullScreen {
originalFrame = frame
hasGoneFullScreen = true
}
isPlaying = !isPlaying
if isPlaying {
avPlayerLayer.goFullscreen()
avPlayerLayer.player?.play()
} else {
avPlayerLayer.player?.pause()
avPlayerLayer.minimizeToFrame(originalFrame)
}
}
}
在我看來,你應該創建一個FullScreenViewController,它總是被迫支持風景。然後,當按下「全屏」按鈕並將AVPlayer實例傳遞給該視圖控制器時,從當前視圖控制器呈現該視圖控制器,然後爲AVPlayerLayer設置幀並繼續播放。解散後,這將恢復正常,我的意思是你的「肖像」模式。
這是我想到的以及可能的解決方案..希望看看有沒有其他的方法。 –
我用FullScreenViewController試過這個解決方案,並傳遞了具有AVPlayerLayer以及自定義控件UIView的容器UIView。到現在爲止還挺好。然而,點擊關閉全屏後,我關閉了FullScreenViewController,但播放器不會在我的演示視圖中播放。我如何在FullScreenViewController中實現關閉全屏?因爲我認爲自從它被解散後,它的觀點,即玩家容器視圖被取消分配。 –
部分代碼:'FullScreenViewController * controller = [[FullScreenViewController alloc] init]; controller.view = self.playerContainer; //容器uiview [self presentViewController:controller animated:YES completion:nil];' –
- 1. iphone強制肖像模式從風景?
- 2. 強制「風景」方向模式
- 3. 強制Chrome(38)退出全屏模式
- 4. Android上的全屏問題與Trigger.io(&風景強制)
- 5. AVPlayer全屏
- 6. 風景模式下的相機不全屏
- 7. 斯威夫特:播放視頻在風景模式下全屏
- 8. 嵌套AVPlayer全屏?
- 9. Android:在風景模式下拍攝的照片強制
- 10. Android屏幕方向:強迫風景?
- 11. CustomIOS7AlertView風景模式
- 12. 使AVPlayer全屏無信箱
- 13. 在全屏模式下的強制4:3
- 14. 強制網頁以全屏模式運行
- 15. 強制用戶將屏幕旋轉到風景(iOS)
- 16. iOS - 強制全屏視頻
- 17. 在Chrome中強制全屏
- 18. Android的webapp ::風景顯示全屏
- 19. Bootstrap 3全屏旋轉木馬不是全屏的風景
- 20. IOS - 如何強制視圖到風景
- 21. 強制MPMoviePlayerController在風景中播放
- 22. CWAC相機現在強制風景
- 23. 風景模式與模式視圖
- 24. Monotouch iPhone風景模式
- 25. WeeApp的風景模式
- 26. PlayN iOS風景模式
- 27. iphone風景模式慢
- 28. Android禁用風景模式
- 29. uinavigationcontroller和風景模式
- 30. 旋轉風景模式
當視頻播放和全屏,設置'supportedInterfaceOrientations'僅景觀 –
這工作非常久遠下面給出了答案,可你也看到我的意見給它一個問題關閉全屏實現? –
澄清:您的問題是當您關閉全屏播放器時 - 較小的播放器不知道繼續播放和從哪裏播放? –