Действие кнопки ios AVPlayer не срабатывает - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь добавить кнопку поверх видео плеера.Кнопка добавляется, но событие нажатия не запускается из симулятора iOS.

Однако событие запускается точно, когда я делаю это программно.

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.


    guard let url = URL(string: "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_adv_example_hevc/master.m3u8") else {
        return
    }
    // Create an AVPlayer, passing it the HTTP Live Streaming URL.
    let player = AVPlayer(url: url)

    // Create a new AVPlayerViewController and pass it a reference to the player.
    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.frame = self.view.bounds



    let btn = UIButton(type: .roundedRect)
    btn.backgroundColor = UIColor.yellow
    btn.setTitle("Do stuff 1", for: .normal)
    btn.frame = CGRect(x: 0, y: 330, width: 300, height: 300)
    btn.isUserInteractionEnabled = true
    btn.addTarget( self, action: #selector(self.pressButton(button:)), for: .touchUpInside)

    //btn.sendActions(for: .touchUpInside)
    //controller.contentOverlayView?.addSubview(btn)
    playerLayer.addSublayer(btn.layer)

    self.view.layer.addSublayer(playerLayer)
    player.play()
}

Пожалуйста, помогите.Как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Проблема в том, что вы добавляете слой кнопки, а не добавляете кнопку в качестве подпредставления.Вот полный код, который вы можете вырезать и вставить.

import UIKit
import AVFoundation

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.


        guard let url = URL(string: "https://devstreaming-cdn.apple.com/videos/streaming/examples/bipbop_adv_example_hevc/master.m3u8") else {
            return
        }
        // Create an AVPlayer, passing it the HTTP Live Streaming URL.
        let player = AVPlayer(url: url)

        // Create a new AVPlayerViewController and pass it a reference to the player.
        let playerLayer = AVPlayerLayer(player: player)
        playerLayer.frame = self.view.bounds
        self.view.layer.addSublayer(playerLayer)

        let btn = UIButton(type: .roundedRect)
        btn.backgroundColor = UIColor.yellow
        btn.setTitle("Do stuff 1", for: .normal)
        btn.frame = CGRect(x: 0, y: 330, width: 300, height: 300)
        btn.isUserInteractionEnabled = true
        btn.addTarget( self, action: #selector(self.pressButton(button:)), for: .touchUpInside)
        view.addSubview(btn)
        player.play()
    }

    @objc func pressButton(button: Any) {
        print("PRESSED")
    }
}

Главное - это просто view.addSubview (btn) .

0 голосов
/ 09 марта 2019

Вы не можете нажать кнопку, используя кнопку раскадровки, потому что она находится за слоем.

У вас есть два варианта.

1) В раскадровке Создайте отдельный вид, где вы можете добавить свой видеослой, вместо того, чтобы добавлять его непосредственно к основному виду и верхней его кнопке

2) Изменить позицию Z кнопки

button.layer.zPosition = 1

...