Добавить пользовательские элементы управления в MoviePlayer

Я пытаюсь выяснить, как добавить пользовательский элемент управления в iPhone MoviePlayer. Для примера того, что я пытаюсь сделать, смотрите следующее изображение.

alt text

Я пытаюсь добавить что-то вроде элементов управления справа и слева от основных элементов управления фильма.

Я сделал это в Open SDK, добавив подкласс в представление плеера, но теперь в официальном SDK и Apple, переходящем на MPMoviePlayerController, я не уверен, как это сделать.

Также с моей старой прошивкой 1.x мне потребовалось захватить сенсорные события и скрыть/показать элемент управления самостоятельно. Я надеюсь, что есть способ сделать это со стандартными элементами управления, но если нет, то это нормально.

Заранее спасибо.

Ответы

Ответ 1

Я нашел ЛУЧШИЙ способ сделать это!

Создайте свой проигрыватель фильмов как обычно, а затем выполните следующие действия:

id vvController = [theMovie videoViewController];
[[vvController _overlayView] addSubview:mainView];

Где "mainView" - это ваш пользовательский оверлей. Выполнение этого делает так, чтобы ваш пользовательский оверлей отображался и скрывался с обычными оверлеями, поскольку они теперь одни в одном!

Обратите внимание, что это все еще использует стандартные фреймворки, но это недокументировано в рамках. Таким образом, он должен быть безопасным на 100%, но "может" измениться без уведомления от Apple в более поздних версиях.

Ответ 2

Люди, вероятно, также видели в разных других блогах следующий подход: "получить окно фильма" - по индексу = 1. Хотя этот подход (см. ниже фрагмент) также, возможно, немного "хрупкий", это скорее "безопаснее", поскольку в MPMoviePlayerController не используются никакие недокументированные или непубличные методы.

Обратите внимание, что вам следует подождать, пока вы не получите MPMoviePlayerContentPreloadDidFinishNotification, чтобы окно фильма (idx = 1) действительно существовало; -)

Примечание. Я также назначаю произвольный (целочисленный) вид "тега" в myOverlayView здесь - чтобы я мог повторно использовать представление, когда это было возможно, то есть проверить, добавлено ли оно в окно родительского проигрывателя.

anyhoo, здесь соответствующий код-фрагмент:

// use slight "hack" to get our (parent) movie-player window, should always (?) be the UIWindow at index = 1
//
UIWindow *moviePlayerWindow= [[[UIApplication sharedApplication] windows] objectAtIndex:1];

myOverlayView.center = CGPointMake(
                            moviePlayerWindow.bounds.size.width - (myOverlayView.bounds.size.height / 2) - myOverlayView.display_origin.y,
                            moviePlayerWindow.center.y
                                  ); // center our overlay-view

myOverlayView.hidden = NO; // and show it

if( [moviePlayerWindow viewWithTag: MY_OVERLAY_VIEW_TAG] == nil ) {
    // haven't added our overlay-view as a sub-view to the main MoviePlayer window yet... so do that now
    myOverlayView.tag = MY_OVERLAY_VIEW_TAG;
    [moviePlayerWindow addSubview: myOverlayView];
}
[moviePlayerWindow bringSubviewToFront: myOverlayView]; // in any case, bring it to the foreground

Ответ 3

Это пример приложения, который Apple предоставляет, должен помочь. Из описания:

Демонстрирует, как использовать Media Игровая платформа для воспроизведения фильма полноэкранный. Образец содержит код для настройки фона фильма цвет, управление воспроизведением и масштабирование режиме через встроенные настройки выражение. Также показано, как рисовать пользовательские элементы управления наложением поверх во время воспроизведения.

Ответ 4

Я рекомендую VideoPlayerKit. Поддерживает потоковое вещание, полноэкранный режим, AirPlay.

https://github.com/ign/VideoPlayerKit

Ответ 5

Я не реализовал ALMoviePlayerController, но, похоже, он предоставляет сжатое и достаточное решение вашей проблемы.

Из git repo:

"Замена замены для MPMoviePlayerController, которая предоставляет элементы пользовательского интерфейса и допускает максимальную настройку"

https://github.com/alobi/ALMoviePlayerController