Установка videoGravity в AVLayerVideoGravityResizeAspectFill не влияет на iOS 5.0 - PullRequest
8 голосов
/ 12 декабря 2011

Я реализовал пользовательский проигрыватель фильмов с AVPlayer. При установке значения videoGravity в AVPlayerLayer на AVLayerVideoGravityResizeAspectFill нужный эффект я вижу в iOS 4.2, 4.3. Но как-то на iOS 5.0 это никак не отразилось. Кто-нибудь видит подобную проблему? Я что-то не так делаю?

Ответы [ 2 ]

17 голосов
/ 02 февраля 2012

На iOS5 вы должны сбросить границы слоев после настройки videoGravity.

Это сработало для меня:

((AVPlayerLayer *)[self layer]).videoGravity = AVLayerVideoGravityResizeAspectFill;
((AVPlayerLayer *)[self layer]).bounds = ((AVPlayerLayer *)[self layer]).bounds;

РЕДАКТИРОВАНИЕ: «self» указывает на объект PlayerView (подкласс UIView) из примера «Собрать все вместе»: https://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/02_Playback.html

3 голосов
/ 07 февраля 2012

Удалось ли вам решить проблему с предложением Михама? Мой модератор "BoltClock" заблокировал мой вопрос, просто хочу знать, сработало ли это предложение для вас так же, как и для меня.

Пожалуйста, BoltClock, не снимайте мой вопрос. Я думаю, что законно спросить, что это за объект типа «я». Михам утверждает, что это решение сработало для него, ну, оно не сработало для меня, поэтому я думаю, что вопрос о том, на что указывает «я», может дать мне понять, какой тип объекта я должен использовать. Документация говорит, что установка силы тяжести в AVLayerVideoGravityResizeAspectFill будет обрезать видео в представлении AVPlayerLayer, но он этого не делает, и я проверил это в iOS 4.3.2 и iOS 5, так что ответ Михэма остается без ответа на оригинальный вопрос Soumya Das и к моему (на что указывает «я»?) тоже. Может быть, у вас есть ответ ?, если да, опубликуйте его здесь, а не просто удалите мой вопрос.

РЕДАКТИРОВАНИЕ: Нашел решение этой проблемы. Установите флажок «Clip Subviews» в IB для вида со слоем, к которому вы собираетесь прикрепить видеоплеер. Затем установите AVLayerVideoGravityResizeAspectFill вашего объекта AVPlayerLayer. Если у вас нет представления в IB, но вы создаете его программно, установите для его свойства clipsToBounds значение YES.

...