Нет документированных уведомлений, отправленных встроенным проигрывателем фильмов UIWebView
.
Фактически, закрытая реализация, используемая в UIWebView
, во многих аспектах отличается от общедоступной MPMoviePlayerController
(например, DRM).
Наиболее важные классы, используемые для воспроизведения видеоконтента в этом UIWebView
, называются MPAVController
и UIMoviePlayerController
.Последняя заставляет плеер выглядеть как полноэкранный интерфейс MPMoviePlayerController
.
Если вы рискуете отказаться от Apple, на самом деле есть способы добиться того, что вы ищете.
ПРИМЕЧАНИЕ Это не задокументировано и может нарушаться при каждом новом выпуске iOS.Однако он работает на iOS4.3, 5.0 и 5.01, 5.1 и 6.0, и может работать и на других версиях.
Я не могу протестировать это решение на iOS 4.1 и 4.2, так что вам решать.Я очень подозреваю, что это будет работать.
Полноэкранное состояние
Если, например, вы намереваетесь отреагировать на пользователя, нажав DONE *Кнопка 1030 *, вы можете сделать это следующим образом:
ОБНОВЛЕНИЕ В старой версии этого ответа рекомендуется использовать UIMoviePlayerControllerDidExitFullscreenNotification
, тогда как этоновая версия (обновленная для iOS6) рекомендует использовать UIMoviePlayerControllerWillExitFullscreenNotification
.
Уровень языка C:
void PlayerWillExitFullscreen (CFNotificationCenterRef center,
void *observer,
CFStringRef name,
const void *object,
CFDictionaryRef userInfo)
{
//do something...
}
CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(),
NULL,
PlayerWillExitFullscreen,
CFSTR("UIMoviePlayerControllerWillExitFullscreenNotification"),
NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);
Уровень Objective-C:
- (void)playerWillExitFullscreen:(NSNotification *)notification
{
//do something...
}
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerWillExitFullscreen:)
name:@"UIMoviePlayerControllerWillExitFullscreenNotification"
object:nil];
Я разработал оба варианта: C-Level и Objective-C-Level, потому что лучший способ узнать обо всем этом - использовать функции C-Level (CoreFoundation), как показано в конце моего ответа.Если отправитель уведомления не использует Objective-C (NSNotifications), вы можете на самом деле не сможете их перехватить с помощью NSNotification-mechanics.
ВоспроизведениеСостояние
Для проверки состояния воспроизведения обратите внимание на "MPAVControllerPlaybackStateChangedNotification"
(как указано выше) и изучите userInfo
, который может выглядеть следующим образом:
{
MPAVControllerNewStateParameter = 1;
MPAVControllerOldStateParameter = 2;
}
Дальнейшее обратное проектирование
Для обратного проектирования и изучения всех отправленных уведомлений используйте следующий фрагмент.
void MyCallBack (CFNotificationCenterRef center,
void *observer,
CFStringRef name,
const void *object,
CFDictionaryRef userInfo)
{
NSLog(@"name: %@", name);
NSLog(@"userinfo: %@", userInfo);
}
CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(),
NULL,
MyCallBack,
NULL,
NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);