簡體   English   中英

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

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

我正在研究用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中那樣的曲線:

在此輸入圖像描述

AVPlayerViewController將一個子圖層添加到視圖中。 設置playerViewController.view.layer.cornerRadius屬性時,它只影響它而不影響它的子playerViewController.view.layer.cornerRadius

在此輸入圖像描述

要修復它,您必須使用masksToBounds圖層屬性剪切子視圖(或此處為子圖層)。

playerViewController.view.layer.masksToBounds = true

在此輸入圖像描述

試試這個。

 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沒問題。

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