Как добавить cornerRadius в AVPlayerViewController в Swift? - PullRequest
0 голосов
/ 29 декабря 2018

Я работаю над приложением для видеоплеера, написанным на Swift.

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

что я сделал сейчас:

fileprivate func setupPlayer() {
    let player = AVPlayer(url: videoURL)
    let playerViewController = AVPlayerViewController()
    playerViewController.view.frame = CGRect.init(x: xPosition,
                                                  y: yPosition,
                                                  width: 200,
                                                  height: 100)
    playerViewController.player = player
    self.addChild(playerViewController)
    self.view.addSubview(playerViewController.view)
    playerViewController.didMove(toParent: self)
    playerViewController.videoGravity = AVLayerVideoGravity.init(rawValue: "")
    playerViewController.view.backgroundColor = UIColor(displayP3Red: 0/255, green: 0/255, blue: 0/255, alpha: 0)
    playerViewController.view.layer.cornerRadius = 20
    playerViewController.contentOverlayView?.isHidden = true
    playerViewController.contentOverlayView?.alpha = 0
}

Проблема:

то, что у меня уже есть: enter image description here

Пример решения:

, но я хочу получить что-то кривое, похожее на то, что в appstore:

enter image description here

Ответы [ 3 ]

0 голосов
/ 29 декабря 2018

AVPlayerViewController добавляет подслой к вашему виду.Когда вы устанавливаете свойство playerViewController.view.layer.cornerRadius, оно влияет только на него, а не на его потомков.

enter image description here

Чтобы исправить это, вы должны обрезать подпредставления (или здесьподслой) с помощью свойства слоя masksToBounds.

playerViewController.view.layer.masksToBounds = true

enter image description here

0 голосов
/ 29 декабря 2018

AVPlayerLayer в порядке.

import UIKit
import AVKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        if let url = URL(string: "SOMEVIDEOURL.mp4") {
            let player = AVPlayer(url: url)
            let layer = AVPlayerLayer(player: player)
            layer.frame = CGRect(x: 100, y: 100, width: 200, height: 100)
            view.layer.addSublayer(layer)
            layer.cornerRadius = 20
        }
    }
}
0 голосов
/ 29 декабря 2018

Попробуйте.

import UIKit
import AVKit

class ViewController: UIViewController {
    var videoController:AVPlayerViewController!
    var player:AVPlayer!
    var url:URL!
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let path:String=Bundle.main.path(forResource: "PinkLake", ofType: "mp4")!
        url=URL(fileURLWithPath: path)
        
        player=AVPlayer(url: url)
        videoController=AVPlayerViewController()
        videoController.player=player;
       
        let viewVideo=UIView()
        viewVideo.frame.origin.x=0;
        viewVideo.frame.origin.y=50;
        viewVideo.frame.size.width=200;
        viewVideo.frame.size.height=200;
        videoController.view.frame=viewVideo.frame
        
        //declare tempView
        var tempView = UIView(frame: videoController.view.frame)
        tempView=videoController.view;
        tempView.layer.cornerRadius=50;
        videoController.view=tempView;
        
        
        self.view.addSubview(viewVideo)
        viewVideo.addSubview(videoController.view)
        self.view.backgroundColor=UIColor.yellow
        player.play()
    }


}
...