Как исправить: 'seek (to :)' устарела в iOS 11.0 - PullRequest
0 голосов
/ 29 апреля 2019

Я уверен, что это довольно простая и распространенная проблема - однако я новичок в программировании и не могу найти ответ на этот вопрос в Интернете. Я пытаюсь создать код, который воспроизводит видео в цикле на фоне приложения. Я создал UIView и вставил в него видео. Теперь я пытаюсь поставить код за ним и сталкиваюсь с проблемами.

У меня есть два сообщения об ошибке:

'seek (to :)' устарел в iOS 11.0: использовать -seekToTime: завершениеHandler :, передавая ноль для завершениеHandler, если вам не требуется уведомление о завершении

и после попытки запустить приложение

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 и эту вещь SIGTERM в AppDelegate после попытки запустить приложение.

Любая помощь, которая может быть оказана, будет высоко оценена, даже если она не решит мою проблему как таковую.

1 Ответ

0 голосов
/ 29 апреля 2019

Обновить следующий код:

 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

Обновление Observer

@objc func videoDidPlayToEnd(_ notification: Notification) {
    let player: AVPlayerItem = notification.object as! AVPlayerItem
    player.seek(to: CMTime.zero, completionHandler: nil)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...