Установка для videoGravity значения AVLayerVideoGravityResizeAspectFill не влияет на iOS 5.0.

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


person Soumya Das    schedule 12.12.2011    source источник


Ответы (2)


В 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

person miham    schedule 02.02.2012
comment
что вы имеете в виду под сбросом? то, что вы делаете, ничего. Две стороны последней строки равны. Как и ожидалось, это не влияет на iOS 8. - person Duck; 08.10.2014
comment
Да, в последней строке кода LHS и RHS одинаковы, как это сбрасывает границы? - person Pradeep Rajkumar; 05.06.2018

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

person carlos_ms    schedule 06.02.2012