如何修复:'seek(to:)' 在 iOS 11.0 中已弃用
How to fix: 'seek(to:)' was deprecated in iOS 11.0
我确定这是一个相当简单且常见的问题 - 但是我是编程新手,无法在线找到此问题的答案。我正在尝试创建在应用程序后台循环播放视频的代码。我创建了一个 UIView
并将视频放入其中。现在,我正试图将代码放在后面,但我 运行 遇到了问题。
我有两条错误消息:
'seek(to:)' was deprecated in iOS 11.0: Use
-seekToTime:completionHandler:, passing nil for the completionHandler if you don't require notification of completion
并且,在尝试 运行 应用后
Thread 1: signal SIGTERM
我几乎尝试了所有方法,包括重写整个代码部分(实际上我之前 运行ning 已经搞定了,即使出现上面列出的第一个错误),但无济于事。
我在网上听说 SIGTERM 问题可以通过重新启动来解决,但事实并非如此,我认为问题是第一个错误的结果,我将在下面解释。
这是我的代码:
import UIKit
import AVFoundation
import AVKit
class ViewController: UIViewController {
@IBOutlet weak var videoView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
private func setupView() {
let path = URL(fileURLWithPath: Bundle.main.path(forResource: "Cafe Video", ofType: "mov")!)
let player = AVPlayer(url: path)
let newLayer = AVPlayerLayer(player: player)
newLayer.frame = self.videoView.frame
self.videoView.layer.addSublayer(newLayer)
newLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
player.play()
player.actionAtItemEnd = AVPlayer.ActionAtItemEnd.none
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.videoDidPlayToEnd(_:)), name: NSNotification.Name(rawValue: "AVPlayerItemDidPlayToEndTimeNotification"), object: player.currentItem)
}
@objc func videoDidPlayToEnd(_ notification: Notification) {
let player: AVPlayerItem = notification.object as! AVPlayerItem
player.seek(to: CMTime.zero)
}
}
第一条错误消息与最后一行代码相关联 (player.seek(to: CMTime.zero)。
我希望能够 运行 我的程序并播放和循环播放我的视频。相反,在尝试 运行 应用程序后,我在模拟器上得到了一个空白的白屏,我的 player.seek 行出现错误,AppDelegate 中出现了这个 SIGTERM 问题。
如果能提供任何帮助,我们将不胜感激 - 即使它本身并不能完全解决我的问题。
更新以下代码:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.setupView()
}
在 setupView() 函数中
let newLayer = AVPlayerLayer(player: player)
newLayer.frame = self.videoView.bounds
更新观察者
@objc func videoDidPlayToEnd(_ notification: Notification) {
let player: AVPlayerItem = notification.object as! AVPlayerItem
player.seek(to: CMTime.zero, completionHandler: nil)
}
我确定这是一个相当简单且常见的问题 - 但是我是编程新手,无法在线找到此问题的答案。我正在尝试创建在应用程序后台循环播放视频的代码。我创建了一个 UIView
并将视频放入其中。现在,我正试图将代码放在后面,但我 运行 遇到了问题。
我有两条错误消息:
'seek(to:)' was deprecated in iOS 11.0: Use -seekToTime:completionHandler:, passing nil for the completionHandler if you don't require notification of completion
并且,在尝试 运行 应用后
Thread 1: signal SIGTERM
我几乎尝试了所有方法,包括重写整个代码部分(实际上我之前 运行ning 已经搞定了,即使出现上面列出的第一个错误),但无济于事。
我在网上听说 SIGTERM 问题可以通过重新启动来解决,但事实并非如此,我认为问题是第一个错误的结果,我将在下面解释。
这是我的代码:
import UIKit
import AVFoundation
import AVKit
class ViewController: UIViewController {
@IBOutlet weak var videoView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
private func setupView() {
let path = URL(fileURLWithPath: Bundle.main.path(forResource: "Cafe Video", ofType: "mov")!)
let player = AVPlayer(url: path)
let newLayer = AVPlayerLayer(player: player)
newLayer.frame = self.videoView.frame
self.videoView.layer.addSublayer(newLayer)
newLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill
player.play()
player.actionAtItemEnd = AVPlayer.ActionAtItemEnd.none
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.videoDidPlayToEnd(_:)), name: NSNotification.Name(rawValue: "AVPlayerItemDidPlayToEndTimeNotification"), object: player.currentItem)
}
@objc func videoDidPlayToEnd(_ notification: Notification) {
let player: AVPlayerItem = notification.object as! AVPlayerItem
player.seek(to: CMTime.zero)
}
}
第一条错误消息与最后一行代码相关联 (player.seek(to: CMTime.zero)。
我希望能够 运行 我的程序并播放和循环播放我的视频。相反,在尝试 运行 应用程序后,我在模拟器上得到了一个空白的白屏,我的 player.seek 行出现错误,AppDelegate 中出现了这个 SIGTERM 问题。
如果能提供任何帮助,我们将不胜感激 - 即使它本身并不能完全解决我的问题。
更新以下代码:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.setupView()
}
在 setupView() 函数中
let newLayer = AVPlayerLayer(player: player)
newLayer.frame = self.videoView.bounds
更新观察者
@objc func videoDidPlayToEnd(_ notification: Notification) {
let player: AVPlayerItem = notification.object as! AVPlayerItem
player.seek(to: CMTime.zero, completionHandler: nil)
}