简体   繁体   English

如何在Swift中将cornerRadius添加到AVPlayerViewController?

[英]How to add cornerRadius to AVPlayerViewController in Swift?

i'm working on video player app that written in Swift . 我正在研究用Swift编写的视频播放器应用程序。

my problem is i should make AVPlayerViewController corners curve. 我的问题是我应该使AVPlayerViewController角落曲线。 but i want to use just AVPlayerViewController not any other classes. 但我想只使用AVPlayerViewController而不是任何其他类。

what i did now: 我现在做了什么:

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
}

Problem: 问题:

what i already have is: 我已经拥有的是: 在此输入图像描述

Example Solution: 示例解决方案

but i want to have something curve like the one in appstore: 但我希望有一些像appstore中那样的曲线:

在此输入图像描述

The AVPlayerViewController adds a sub layer to your view. AVPlayerViewController将一个子图层添加到视图中。 When you set the playerViewController.view.layer.cornerRadius property it only affects it and not its children. 设置playerViewController.view.layer.cornerRadius属性时,它只影响它而不影响它的子playerViewController.view.layer.cornerRadius

在此输入图像描述

To fix it you must clip the subviews (or here the sublayer) by using the masksToBounds layer property. 要修复它,您必须使用masksToBounds图层属性剪切子视图(或此处为子图层)。

playerViewController.view.layer.masksToBounds = true

在此输入图像描述

Try This. 试试这个。

 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() } } 

AVPlayerLayer is OK. 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
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM