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

Я пытаюсь добавить что-то вроде элементов управления справа и слева от основных элементов управления фильмом.
Я сделал это в Open SDK, добавив подкласс к playerview, но теперь в официальном SDK и Apple, перейдя на MPMoviePlayerController, я не знаю, как это сделать.
Также с моей старой прошивкой 1.x мне требовалось захватывать события касания и самому скрывать / показывать элемент управления. Я надеюсь, что есть способ сделать это с помощью стандартных элементов управления, но если нет, то ничего страшного.
Заранее спасибо.





Этот образец приложения, предоставляемый Apple, должен помочь. Из описания:
Demonstrates how to use the Media Player Framework to play a movie full-screen. The sample contains code to configure the movie background color, playback controls and scaling mode via the built-in Settings application. Also shows how to draw custom overlay controls on top of the movie during playback.
Я нашел ЛУЧШИЙ способ сделать это!
Вы создаете свой проигрыватель фильмов, как обычно, а затем делаете следующее:
id vvController = [theMovie videoViewController];
[[vvController _overlayView] addSubview:mainView];
Где mainView - ваш пользовательский оверлей. Благодаря этому ваш пользовательский оверлей будет отображаться и скрываться вместе с обычными наложениями, поскольку теперь они являются одним и тем же!
Обратите внимание, что это все еще использует стандартные фреймворки, но это недокументировано в фреймворках. Таким образом, он должен быть на 100% безопасным для магазинов приложений, но "может" измениться без уведомления Apple в более поздних версиях.
вы, ребята, случайно не знаете, можете ли вы создавать собственные элементы управления, кроме тех, которые есть в медиаплеере? например покадровое воспроизведение?
Вы можете создавать элементы управления, но то, что они делают, ограничивается тем, что вы можете делать с помощью SDK. Например, у меня есть элемент управления рейтингом, который я показываю, и когда он оценивается, он отправляет его на сервер. То, что вы хотите, потребует возможности сказать игроку, чтобы он переместился вперед на 1 кадр и остановился, что в настоящее время вы не можете. Если хотите, отправьте запрос функции на bugreporter.apple.com.
предоставьте любой образец кода для пользовательского видеоплеера с собственными элементами управления
Не имеет значения, находится ли он в «стандартной структуре», это частный метод, поэтому он не разрешен!
Я понимаю, что это сработало в 2008 году, но как насчет 2013 года? У меня это не работает, поэтому я подумал, что спрошу.
Это приведет к отклонению вашего приложения.
Люди здесь, вероятно, также видели в различных других сообщениях в блогах следующий подход к «получить окно проигрывателя фильмов» - при index = 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
Возможно, я неправильно интерпретирую вашу теорию, но мой пользовательский элемент управления не скрывается за остальными элементами управления плеером. Должен ли этот код допускать это?
Я рекомендую VideoPlayerKit. Поддерживает потоковую передачу, полноэкранный режим, AirPlay.
https://github.com/ign/VideoPlayerKit
У меня возникли проблемы с использованием этого, в частности, с частью кода «ShareThis». Вот вопрос, который я писал раньше. stackoverflow.com/questions/17667078/…
Я не реализовал ALMoviePlayerController, но, похоже, он дает краткое и достаточное решение вашей проблемы.
Из репозитория git:
«Подставная замена для MPMoviePlayerController, открывающая элементы пользовательского интерфейса и обеспечивающая максимальную настройку»
Это работает для добавления настраиваемого элемента управления, однако не переключается с элементами управления по умолчанию. В примере показано, как поймать прикосновение к вашему собственному настраиваемому элементу управления, но то, что они показывают, вы не сможете скрыть. Вам все равно нужно будет ловить другие нажатия, чтобы иметь возможность скрыть свой контроль.