【问题标题】:Stop AV Player after done is pressed按下完成后停止 AV Player
【发布时间】:2016-06-24 18:43:49
【问题描述】:

我将本地视频加载到新的视图控制器中,但点击完成后它消失并立即再次弹出。我不知道是否有办法跟踪通知或什么。

这是我的代码:

import UIKit
import AVKit
import AVFoundation

class VideoController1: UIViewController {

    var playerViewController = AVPlayerViewController()
    var playerView = AVPlayer()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func viewDidAppear(_ animated: Bool) {
        let fileURL = NSURL(fileURLWithPath: "/Users/jamesjarrett/Desktop/NIMS/NIMS/NIMS/Vid2.mp4")
        playerView = AVPlayer(url: fileURL as URL)
        playerViewController.player = playerView
        self.present(playerViewController, animated: true){
            self.playerViewController.player?.play()
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}

【问题讨论】:

  • 保留一个布尔值使其只显示一次。每次显示视图时都会调用 viewDidAppear,因此会弹出 av 播放器

标签: ios xcode swift


【解决方案1】:

你把你的代码

let fileURL = NSURL(fileURLWithPath: "/Users/jamesjarrett/Desktop/NIMS/NIMS/NIMS/Vid2.mp4")
    playerView = AVPlayer(url: fileURL as URL)
    playerViewController.player = playerView
    self.present(playerViewController, animated: true){
        self.playerViewController.player?.play()
    }

ViewController 的 ViewDidAppear 内部。

ViewDidAppear() 发生在您的视图再次出现在屏幕上时。所以这意味着,当 AVPlayer 关闭时,它会返回到该 View,并且 AVPlayer 将再次呈现。

你有两个选择:

为该按钮创建一个 UIButton 和一个动作

var button = UIButton(frame: CGRect(0, self.view.frame.height*0.9, self.view.frame.width, self.view.frame.height*0.1))
button.addTarget(self, #selector(VideoController1.playController), nil)
self.view.addSubview(button)    

let fileURL = NSURL(fileURLWithPath: "/Users/jamesjarrett/Desktop/NIMS/NIMS/NIMS/Vid2.mp4")

func playController() {
    playerView = AVPlayer(url: fileURL as URL)
    playerViewController.player = playerView
    self.present(playerViewController, animated: true){
        self.playerViewController.player?.play()
    }
}

-- 或者--

如果您希望控制器仅在用户第一次看到视图时播放,就是这样,那么您可以这样做

var played = false

func viewDidAppear() {
    if(!played) {
        let fileURL = NSURL(fileURLWithPath: "/Users/jamesjarrett/Desktop/NIMS/NIMS/NIMS/Vid2.mp4")
        playerView = AVPlayer(url: fileURL as URL)
        playerViewController.player = playerView
        self.present(playerViewController, animated: true){
            played = true
            self.playerViewController.player?.play()
        }
    }
}

不要在上面引用我的代码,只是快速输入它,以便给你一个大致的想法。

【讨论】:

  • 所以我试图在界面中添加一个按钮并使用您提到的第一种方法,但它在 swift 中看起来确实如此
  • Button.addTarget(self, #selector(className.playController), .TouchUpInside)
  • 试图投票,但因为我是新来的溢出它说我必须有 x 个代表点。感谢您的帮助@impression7vx
  • 如果您愿意,您应该能够接受答案!没问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
  • 2011-07-16
  • 2018-12-23
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多