簡體   English   中英

設置AVPlayerLayer VideoGravity適用於模擬器,而不適用於iPad

[英]Setting AVPlayerLayer VideoGravity works on Simulator, not on iPad

我目前正在使用AVPlayer Framework為流內容開發視頻播放器。 我偶然發現了AVPlayerLayer的VideoGravity String-Property,它允許我將玩家縮放/調整模式設置為不同的值。

為了向用戶提供默認播放器中已知的縮放功能,我設置了一個執行以下代碼的方法:

AVPlayerLayer *layer = (AVPlayerLayer *)[self.videoContainer layer];

if([layer.videoGravity isEqualToString:AVLayerVideoGravityResizeAspect])
    layer.videoGravity = AVLayerVideoGravityResizeAspectFill;
else 
    layer.videoGravity = AVLayerVideoGravityResizeAspect;

這在模擬器中運行得很好,但不知何故不能在安裝了iOS 5.0.1的iPad 2上運行。

有沒有人遇到類似的問題? 這是一個已知的iOS Bug 5.0.1嗎? 有沒有更好的方法來實現AVPlayerLayer的縮放/調整大小?

任何想法/提示/幫助和建議都非常感謝,

謝謝,

山姆

設置邊界將在內部setNeedsLayout 如果你只改變引力,你必須稱之為自己。 調用setNeedsDisplay強制重新繪制也不會有任何影響,盡管我認為AVPlayerLayer正在頻繁更新圖層內容以至於無關緊要。

編輯:你的名字是我的兩倍!

我終於通過以下方式交換上述聲明來解決我的問題...

    if (self.player.status == AVPlayerStatusReadyToPlay) {
    if([((AVPlayerLayer *)[self.videoContainer layer]).videoGravity isEqualToString:AVLayerVideoGravityResizeAspect])
        ((AVPlayerLayer *)[self.videoContainer layer]).videoGravity = AVLayerVideoGravityResizeAspectFill;
    else 
        ((AVPlayerLayer *)[self.videoContainer layer]).videoGravity = AVLayerVideoGravityResizeAspect;

    ((AVPlayerLayer *)[self.videoContainer layer]).bounds = ((AVPlayerLayer *)[self.videoContainer layer]).bounds;
}

將AVPlayerLayer的邊界設置為AVPlayerLayer的邊界似乎可以解決問題。 雖然我不明白為什么。

然而:歡呼工作解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM