Я разрабатываю видеопроигрыватель с AVPlayer API из AV Foundation в MonoTouch (но решение в objective-c тоже может быть приятным). Я пытаюсь реализовать полноэкранный режим.
Чтобы отобразить видеофрагменты, у меня есть UIView (пусть вызывается просмотр воспроизведения), где я добавил AVPlayerLayer в качестве подсмотра слоя просмотра воспроизведения:
UIView *playbackView = ...
AVPlayerLayer *playerLayer = ...
[playbackView.layer addSublayer:playerLayer];
свойства слоя задаются следующим образом:
playerLayer.needsDisplayOnBoundsChange = YES;
playbackView.layer.needsDisplayOnBoundsChange = YES;
чтобы быть уверенным, что они изменены, если размер вида воспроизведения изменен. Первоначально представление воспроизведения имеет координаты (0, 0, 320, 180) (отображается только в верхней части пользовательского интерфейса). Затем я делаю полноэкранную анимацию, устанавливая размер кадра просмотра как размер окна:
playbackView.frame = playbackView.window.bounds;
Он отлично работает. Теперь представление воспроизведения заполняет все окно (установите цвет фона, чтобы увидеть его). Но мой AVPlayerLayer по-прежнему остается в верхней части представления, как раньше, в не полноэкранном режиме.
Почему уровень AVPlayer не изменяется в соответствии с новым видом просмотра? Нужно ли делать анимацию на AVPlayerLayer? Обновление с помощью setNeedsLayout, layoutSubviews (похоже, что-то не меняет...)? Удалить AVPlayerLayer и добавить его снова?