要获取AVPlayerLayer中播放视频可见部分的矩形,可以使用以下代码示例:
import AVFoundation
import UIKit
class ViewController: UIViewController {
var player: AVPlayer!
var playerLayer: AVPlayerLayer!
override func viewDidLoad() {
super.viewDidLoad()
// 创建AVPlayer实例
let videoURL = URL(fileURLWithPath: "path/to/video.mp4")
player = AVPlayer(url: videoURL)
// 创建AVPlayerLayer实例
playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = view.bounds
view.layer.addSublayer(playerLayer)
// 添加观察者监听AVPlayerLayer的bounds属性变化
playerLayer.addObserver(self, forKeyPath: "bounds", options: .new, context: nil)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// 开始播放视频
player.play()
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
// 当AVPlayerLayer的bounds属性变化时触发
if keyPath == "bounds" {
// 获取播放视频可见部分的矩形
let visibleRect = playerLayer.videoRect
print("Visible Rect: \(visibleRect)")
}
}
}
上述代码中,我们首先创建了一个AVPlayer实例并将其关联到AVPlayerLayer实例中。然后,将AVPlayerLayer添加到视图的图层中。
在viewDidAppear
方法中,我们开始播放视频。
最后,我们使用键值观察(KVO)来观察AVPlayerLayer的bounds属性变化。当该属性发生变化时,我们可以通过playerLayer.videoRect
来获取播放视频可见部分的矩形。在示例代码中,我们简单地将该矩形打印出来,但你可以根据需要对其进行进一步处理。