Я занимаюсь разработкой видеоплеера с API AVPlayer от AV Foundation в MonoTouch (но решение в target-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 и добавить его снова?