Поддержка AirPlay, MPMoviePlayerController и MPVolumeView - PullRequest
14 голосов
/ 20 апреля 2011

Я занимаюсь разработкой приложения для iPhone с поддержкой воспроизведения видео. Я использую MPMoviePlayerController с пользовательскими элементами управления для воспроизведения видео. Для этой цели я установил стиль управления MPMoviePlayerController в MPMovieControlStyleNone.

Я бы хотел поддерживать функцию AirPlay для воспроизводимого видео. Согласно документации, мы должны установить для свойства «allowAirPlay» MPMoviePlayerController значение YES, чтобы включить функцию AirPlay. Как отобразить кнопку AirPlay на интерфейсе проигрывателя, если я использую MPMoviePlayerController с пользовательскими элементами управления?

Я пробовал следующее:

  1. Создан MPVolumeView
  2. Установите для значений showsRouteButton и showsVolumeSlider в MPVolumeView значение NO, чтобы скрыть ползунок громкости и кнопку маршрута
  3. Добавлен MPVolumeView на мой пользовательский плеер View

Я не дал ссылку MPVolumeView и MPMoviePlayerController друг на друга. Но если для параметра «allowAirPlay» MPMoviePlayerController установлено значение «YES», то кнопка AirPlay отображается в MPVolumeView. Как связаны MPVolumeView и MPMoviePlayerController? Пожалуйста, дайте мне знать связь между этими двумя классами, которые созданы независимо.

Спасибо и С уважением, Deepa

Ответы [ 4 ]

10 голосов
/ 09 августа 2011

Поскольку MPMoviePlayerController позволяет воспроизводить только одно видео за раз, среда MediaPlayer всегда знает, какое видео воспроизводится.Вот как MPVolumeView знает о MPMoviePlayerController.У меня нет официальных документов, но я полагаю, что таким образом они внедряются в фреймворк.

Поскольку, вероятно, происходит много проверок и противовесов (и они любят последовательные интерфейсы), Apple позволяет вам использовать только ихКнопка AirPlay / UI для подключения к этой функции.Тем не менее, вы можете поместить эту кнопку куда хотите:

airplayButton = [[MPVolumeView alloc] init];
airplayButton.frame = CGRectMake(myX, myY, 40, 40);
[airplayButton setShowsVolumeSlider:NO];
[customPlayerControls.view addSubview:airplayButton];

Я только что догадался о ширине, высота 40,40, и я уверен, что это не правильно, но как только я получил кнопку на местеэто не имело значения.

2 голосов
/ 25 февраля 2012

MPVolumeView имеет атрибут, позволяющий скрыть ползунок громкости и показать кнопку «Маршрут».Таким образом, нет необходимости обходить представления, скрывающие вещи.

MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:myContainerView.bounds] autorelease];
volumeView.showsVolumeSlider = NO;
volumeView.showsRouteButton = YES;
[myContainerView addSubview:volumeView];

Расположение кнопки AirPlay (Маршрут) может быть не тем, что вы ожидаете, поэтому вам, возможно, придется немного поиграть в кадр представления контейнера.чтобы получить, где вы хотите.

2 голосов
/ 03 июня 2011
for (UIButton *button in volumeView.subviews) {
if ([button isKindOfClass:[UIButton class]]) {
    [button setImage:[UIImage imageNamed:@"custom-route-button.png"] forState:UIControlStateNormal];
    [button sizeToFit];
}}

Я думаю, это поможет вам.

0 голосов
/ 03 июня 2011

Ответ: ты не можешь. Начиная с iOS 4.3, нет официального способа предоставить свои собственные элементы управления для Airplay - вам нужно использовать стандартные элементы управления, если вам нужны эти функции.

...