我正在播放使用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. 強制Chrome(38)退出全屏模式
- 3. 斯威夫特:播放視頻在風景模式下全屏
- 4. 風景模式下的相機不全屏
- 5. 嵌套AVPlayer全屏?
- 6. CustomIOS7AlertView風景模式
- 7. 強制用戶將屏幕旋轉到風景(iOS)
- 8. 使AVPlayer全屏無信箱
- 9. 強制網頁以全屏模式運行
- 10. 在全屏模式下的強制4:3
- 11. iOS - 強制全屏視頻
- 12. Android的webapp ::風景顯示全屏
- 13. 強制MPMoviePlayerController在風景中播放
- 14. 旋轉風景模式
- 15. Android禁用風景模式
- 16. iphone風景模式慢
- 17. uinavigationcontroller和風景模式
- 18. uiwindow風景模式問題
- 19. Monotouch iPhone風景模式
- 20. WeeApp的風景模式
- 21. Flex全屏模式
- 22. MigLayout全屏模式
- 23. WPF全屏模式
- 24. 風景模式下的增強現實應用程序
- 25. Android屏幕錄製方法 - 風景錄製,全屏和部分屏幕錄製視頻播放
- 26. 的UISearchBar沒有背景風景模式
- 27. 在風景模式下支持不同的屏幕尺寸
- 28. Android的 - 強制全屏幕軟鍵盤
- 29. ios MPMoviePlayerController強制橫向全屏
- 30. 將Chrome/Firefox強制進入全屏?
當視頻播放和全屏,設置'supportedInterfaceOrientations'僅景觀 –
這工作非常久遠下面給出了答案,可你也看到我的意見給它一個問題關閉全屏實現? –
澄清:您的問題是當您關閉全屏播放器時 - 較小的播放器不知道繼續播放和從哪裏播放? –