【发布时间】:2012-02-29 10:55:53
【问题描述】:
我正在使用 MonoTouch 中的 AV Foundation 的 AVPlayer API 开发视频播放器(但 Objective-c 中的解决方案也可能很好)。我正在尝试实现全屏模式。
为了显示视频帧,我有一个 UIView(我们称之为播放视图),我在其中添加了 AVPlayerLayer 作为播放视图层的子视图:
UIView *playbackView = ...
AVPlayerLayer *playerLayer = ...
[playbackView.layer addSublayer:playerLayer];
图层属性设置如下:
playerLayer.needsDisplayOnBoundsChange = YES;
playbackView.layer.needsDisplayOnBoundsChange = YES;
以确保在播放视图大小发生更改时调整它们的大小。最初,播放视图的坐标为 (0, 0, 320, 180)(仅显示在 UI 顶部)。然后,我通过将播放视图帧大小设置为窗口大小来制作全屏动画:
playbackView.frame = playbackView.window.bounds;
它工作正常。播放视图现在填充了所有窗口(设置背景颜色以查看它)。但是我的 AVPlayerLayer 仍然像以前在非全屏模式下一样停留在视图的顶部。
为什么AVPlayer层没有根据播放视图的新大小调整大小?我还需要在 AVPlayerLayer 上制作动画吗?用 setNeedsLayout、layoutSubviews 刷新(它似乎没有改变什么......)?把AVPlayerLayer去掉再重新添加?
【问题讨论】:
-
一种解决方案是根据动画期间的播放视图帧(playerLayer.frame =playbackView.frame)也调整图层帧的大小。但是如果我们这样做,图层就不是动画的,而是直接以最终大小显示的。我们如何才能动画化这种变化?使用 Core Animation 代替 UIView 动画?
标签: objective-c xamarin.ios avfoundation avplayer