운 좋게도 나는 대답을 스스로 찾을 수있었습니다. UIScreen은 iOS 기기에서와 마찬가지로 tvOS와 잘 작동합니다. 내 완벽한 솔루션은 아래 있습니다, 누군가가 시간을 절약하는 데 도움이되기를 바랍니다. 나는 끝을 촉발시키는 내 관찰자들을 포함시키고있다.
나는이 말은 경계
let screenBounds = UIScreen.main.bounds
let centerX = screenBounds.size.width/2
let centerY = screenBounds.size.height/2
let loadingLabelCenterY = centerY + 48
let activityIndicatorCenter = CGPoint(x: centerX, y: centerY)
loadingActivityIndicator.center = activityIndicatorCenter
를 얻을 수 UIScreen를 사용하는 부분 인 활동
class VideoLoadingActivityIndicator {
var loadingActivityIndicator:UIActivityIndicatorView!
var loadingLabel: UILabel!
func beginLoadingActivity(viewController:UIViewController)
{
loadingActivityIndicator = UIActivityIndicatorView(frame:CGRect(x: 500, y: 500, width: 500, height: 500)) as UIActivityIndicatorView
loadingActivityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.whiteLarge
loadingActivityIndicator.sizeToFit()
loadingActivityIndicator.color = UIColor.white
을 처리하는 데 사용되는 클래스는
좀 선명도를 추가 할 레이블을 추가
loadingLabel = UILabel(frame: CGRect(x: centerX, y: loadingLabelCenterY, width: 600, height: 100))
loadingLabel.font = UIFont(name: "Helvetica", size: 30)
loadingLabel.text = "Loading Video"
loadingLabel.numberOfLines = 1
loadingLabel.sizeToFit()
loadingLabel.textAlignment = .center
// reset frame so it is centered in screen
let labelWidth = loadingLabel.frame.width
let labelHeight = loadingLabel.frame.height
let loadingLabelCenterX = centerX - (labelWidth/2)
loadingLabel.frame = CGRect(x: loadingLabelCenterX, y: loadingLabelCenterY, width: labelWidth, height: labelHeight)
loadingLabel.textColor = UIColor.white
// Add indicator and label to subview
viewController.view.addSubview(loadingActivityIndicator)
viewController.view.addSubview(loadingLabel)
self.loadingActivityIndicator.startAnimating()
}
func endLoadingActivity(viewController:UIViewController)-> Void
{
loadingActivityIndicator.removeFromSuperview()
loadingLabel.removeFromSuperview()
}
그리고 AVPlayerViewController에서로드 작업을 추가하려고합니다.
먼저 활동 표시 객체 생성 :
let indicator = VideoLoadingActivityIndicator()
당신의 자산을 만들고 playerItem을
let asset = AVAsset(url: runFile)
let assetKeys = [
"playable",
"hasProtectedContent"
]
let playerItem = AVPlayerItem(asset: asset, automaticallyLoadedAssetKeys: assetKeys)
작동 표시등 애니메이션을 시작합니다 (I 어떤 플레이어 항목의 키 설정)
indicator.beginLoadingActivity(viewController: self, color: .white)
플레이어에 알림 추가 및 재생 시작
이것이 내가했던 것과 같은 몇 가지 문제로 실행 다른 사람을 도움이
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "status" && player?.status == AVPlayerStatus.readyToPlay {
indicator.endLoadingActivity(viewController: self)
}
}
희망 :3210
playerItem.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.new, context: nil)
player = AVPlayer(playerItem: playerItem)
player?.play()
마지막으로, 관찰자를 처리합니다.