首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在纵向模式下播放全屏幕大小的视频?

如何在纵向模式下播放全屏幕大小的视频?
EN

Stack Overflow用户
提问于 2017-12-18 13:21:37
回答 3查看 7.5K关注 0票数 4

我想播放一些视频在水花屏幕的纵向模式-全屏。这有可能吗?请指导我找到正确的解决方案。

我在寻找快速的解决方案

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-18 13:42:02

创建UIView的子类,其中包含一个AVPlayer和一个函数createBackground

代码语言:javascript
复制
import AVFoundation

class BackgroundVideo: UIView {
  var player: AVPlayer?

  func createBackground(name: String, type: String) { }
}

那么您的createBackground可能是这样的:

代码语言:javascript
复制
func createBackground(name: String, type: String) {
  guard let path = Bundle.main.path(forResource: name, ofType: type) else { return }

  player = AVPlayer(url: URL(fileURLWithPath: path))
  player?.actionAtItemEnd = AVPlayerActionAtItemEnd.none;
  let playerLayer = AVPlayerLayer(player: player)
  playerLayer.frame = self.frame
  playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
  self.layer.insertSublayer(playerLayer, at: 0)
  player?.seek(to: kCMTimeZero)
  player?.play()
}

然后您可以添加更多的内容,例如观察通知:

  • 用于实现视频循环的AVPlayerItemDidPlayToEndTime
  • UIApplicationWillEnterForeground用于控制视频循环,从背景恢复后。

最后,您可以附加这个BackgroundView,无论您需要什么地方:假飞溅屏幕,主屏幕,等等。

票数 9
EN

Stack Overflow用户

发布于 2017-12-18 13:38:55

SWIFT 3.0

您不能在默认的启动屏幕中这样做,但是您可以做一些解决办法来解决这个问题。

首先,你应该采取你的视频的第一帧,这将是图像。

您可以使用photoshop或任何其他图形工具来实现这一点。

现在,您可以在UIImageView中将其设置为默认启动屏幕。

现在制作一个UIViewController并启动它作为初始视图控制器。

下面是播放视频的代码

代码语言:javascript
复制
    private func playFullScreenVideo() {
    // drag your video file in  project
    // check if video file is available,if not return
    guard let path = Bundle.main.path(forResource: "video", ofType:"mp4") else {
        debugPrint("video.mp4 missing")
        return
    }
    // create instance of videoPlayer with video path
    let videoPlayer = AVPlayer(url: URL(fileURLWithPath: path))
    // create instance of playerlayer with videoPlayer
    let playerLayer = AVPlayerLayer(player: videoPlayer)
    // set its videoGravity to AVLayerVideoGravityResizeAspectFill to make it full size
    playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
    // add it to your view
    playerLayer.frame = self.view.frame
    playerView.layer.addSublayer(playerLayer)
    // start playing video
    videoPlayer?.play()
  }

如果在这件事上有什么麻烦请告诉我

票数 2
EN

Stack Overflow用户

发布于 2017-12-18 13:37:46

app委托的内部didFinishLaunch方法

代码语言:javascript
复制
let splashScreenVC = viewController(withIdentifier: "identifier", inStoryboard: "storyboard:) as? SplashViewController
window?.rootViewController = splashScreenVC 

在视图控制器SplashViewController中,可以使用viewDidLoad方法播放视频。

代码语言:javascript
复制
 func playVideo() {
    guard let videoPath = Bundle.main.path(forResource: "Redtaxi-splash", ofType:"mov") else {
        return
    }

    let videoURL = URL(fileURLWithPath: videoPath)
    let player = AVPlayer(url: videoURL)
    playerViewController = AVPlayerViewController()
    playerViewController?.player = player
    playerViewController?.showsPlaybackControls = false
    playerViewController?.view.frame = view.frame
    playerViewController?.view.backgroundColor = .white
    playerViewController?.view.contentMode = .scaleAspectFill


    NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying(note:)),
                                           name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: player.currentItem)

    view.addSubview((playerViewController?.view)!)
    playerViewController?.player?.play()
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47869441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档