【问题标题】:How to add cornerRadius to AVPlayerViewController in Swift?如何在 Swift 中将cornerRadius 添加到 AVPlayerViewController?
【发布时间】:2018-12-29 08:43:27
【问题描述】:

我正在开发用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
}

问题:

我已经拥有的是:

示例解决方案:

但我想拥有类似 appstore 中的曲线:

【问题讨论】:

    标签: ios swift avplayerviewcontroller


    【解决方案1】:

    AVPlayerViewController 为您的视图添加了一个子层。当您设置 playerViewController.view.layer.cornerRadius 属性时,它只会影响它而不影响它的子级。

    要修复它,您必须使用masksToBounds 图层属性来剪辑子视图(或此处的子图层)。

    playerViewController.view.layer.masksToBounds = true
    

    【讨论】:

      【解决方案2】:

      试试这个。

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多