Добавить пользовательские элементы управления в 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