Ios 如何在不同的视图控制器中具有相同的视频实例?
我想在我的应用程序的背景中有一个视频,但是我已经通过让我的所有类继承这个类来实现了这一点Ios 如何在不同的视图控制器中具有相同的视频实例?,ios,iphone,swift,swift3,Ios,Iphone,Swift,Swift3,我想在我的应用程序的背景中有一个视频,但是我已经通过让我的所有类继承这个类来实现了这一点 class MyClass: UIViewController { var avPlayer: AVPlayer! var avPlayerLayer: AVPlayerLayer! var paused: Bool = false override func viewDidLoad() { super.viewDidLoad() let theURL = Bundle.main.url
class MyClass: UIViewController {
var avPlayer: AVPlayer!
var avPlayerLayer: AVPlayerLayer!
var paused: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
let theURL = Bundle.main.url(forResource:"video", withExtension: "mp4")
avPlayer = AVPlayer(url: theURL!)
avPlayerLayer = AVPlayerLayer(player: avPlayer)
avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
avPlayer.volume = 0
avPlayer.actionAtItemEnd = .none
avPlayerLayer.frame = view.layer.bounds
view.backgroundColor = .clear
view.layer.insertSublayer(avPlayerLayer, at: 0)
NotificationCenter.default.addObserver(self,
selector: #selector(playerItemDidReachEnd(notification:)),
name: NSNotification.Name.AVPlayerItemDidPlayToEndTime,
object: avPlayer.currentItem)
}
func playerItemDidReachEnd(notification: Notification) {
let p: AVPlayerItem = notification.object as! AVPlayerItem
p.seek(to: kCMTimeZero)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
avPlayer.play()
paused = false
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
avPlayer.pause()
paused = true
}
问题是,当我从视图控制器更改时,视频会重新开始,我不希望这样,我希望视频从上一个视图控制器中继续,我的解决方案是实例化一个视频,并在所有视图控制器上访问它。我怎么能做到这一点?或者还有其他解决方案吗?您可以使用Singleton实现这一点 下面是一个例子:
final class VideoPlayerManager {
static let shared = VideoPlayerManager()
private init() { }
var avPlayer: AVPlayer!
var avPlayerLayer: AVPlayerLayer!
var paused: Bool = false
}
要调用viewDidLoad,请执行以下操作:
您可以使用Singleton实现这一点 下面是一个例子:
final class VideoPlayerManager {
static let shared = VideoPlayerManager()
private init() { }
var avPlayer: AVPlayer!
var avPlayerLayer: AVPlayerLayer!
var paused: Bool = false
}
要调用viewDidLoad,请执行以下操作:
创建如下单例:-
class A {
static let a = A()
}
您可以在同一类的多个类中访问上述对象
实例
创建如下单例:-
class A {
static let a = A()
}
您可以在同一类的多个类中访问上述对象
实例
背景很重要。例如,如果在导航控制器中嵌入了视图控制器,则将视频播放器放在导航控制器中,并在顶部添加清晰的背景色视图控制器会更有意义。通过这种方式,您可以保留一个实例,并且您的视频播放器也可以独立于topViewController,这是一个这样的选项。上下文非常重要。例如,如果在导航控制器中嵌入了视图控制器,则将视频播放器放在导航控制器中,并在顶部添加清晰的背景色视图控制器会更有意义。这样,您就保留了一个实例,并且您的视频播放器再次独立于topViewController,这是一个这样的选项。