如何解决:在iOS 11.0中不推荐使用'seek(to :)'

问题描述 投票:0回答:1

我确信这是一个相当简单和常见的问题 - 但我是编程新手,无法在线找到答案。我正在尝试创建在应用程序的后台循环播放视频的代码。我创建了一个UIView并将视频放入其中。现在我正在尝试将代码置于其后,我遇到了问题。

我有两条错误消息:

'seek(to :)'在iOS 11.0中已被弃用:使用-seekToTime:completionHandler :,如果您不需要完成通知,则传递nil为completionHandler

并且,在尝试运行应用程序之后

Thread 1: signal SIGTERM

我已经尝试了几乎所有的事情,包括重写代码的整个部分(我之前实际上已经运行过,即使上面列出了第一个错误)也无济于事。

我在网上听说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事件。

任何可以提供的帮助都将非常感激 - 即使它本身并不能完全解决我的问题。

ios swift avplayer ios11
1个回答
0
投票

更新以下代码:

 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)
}
© www.soinside.com 2019 - 2024. All rights reserved.