Iphone 未收到UIMoviePlayerController illexitFullScreen通知
我的应用程序只是纵向的,但我想允许用户在通过UIWebview观看全屏视频时旋转到横向。我做了一些研究,发现我应该添加我的类作为这些通知的观察者: UIMoviePlayerController标识符完整屏幕通知 UIMoviePlayerController illexitFullScreenNotification 我以观察者的身份添加和删除该类,如下所示:Iphone 未收到UIMoviePlayerController illexitFullScreen通知,iphone,ios,objective-c,uiwebview,Iphone,Ios,Objective C,Uiwebview,我的应用程序只是纵向的,但我想允许用户在通过UIWebview观看全屏视频时旋转到横向。我做了一些研究,发现我应该添加我的类作为这些通知的观察者: UIMoviePlayerController标识符完整屏幕通知 UIMoviePlayerController illexitFullScreenNotification 我以观察者的身份添加和删除该类,如下所示: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:a
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerDidEnterFullScreen:) name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerWillExitFullScreen:) name:@"UIMoviePlayerControllerWillExitFullscreenNotification" object:nil];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIMoviePlayerControllerWillExitFullscreenNotification" object:nil];
}
- (void)moviePlayerDidEnterFullScreen:(NSNotification *)notification
{
self.videoPlayingFullScreen = YES;
}
- (void)moviePlayerWillExitFullScreen:(NSNotification *)notification
{
self.videoPlayingFullScreen = NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
if (self.videoPlayingFullScreen)
{
return UIInterfaceOrientationMaskAllButUpsideDown;
}
return UIInterfaceOrientationMaskPortrait;
}
我的问题是:我从未收到“UIMoviePlayerController illexitFullScreen通知”。我无法使用UIMoviePlayerController IDEXITFullScreenNotification,因为如果用户以横向方式观看完全屏视频并按下“完成”,则上一个视图控制器也会以横向方式显示,而它应该是纵向的
是否有其他方法可以检测用户何时“确实”进入全屏,何时“将”退出全屏?还是我遗漏了什么
编辑:
我的应用程序仅适用于iOS 7。您没有收到
UIMoviePlayerController illexitFullScreenNotification
回调的原因是因为您将自己从视图中移除为观察者将消失:
您没有收到UIMoviePlayerController illexitFullScreenNotification
回调的原因是因为您将自己从视图中移除为观察者,所以将消失:
因为这些回调没有记录,所以我使用Javascript事件(如H2CO3建议的)来确定视频开始、结束或暂停的时间
顺便说一下,我正在使用YouTube播放器
首先,我设置UIWebview并将我的ViewController设置为代理
接下来,我将HTML文件加载到UIWebview中
Index.html
<html>
<body bgcolor=#8C1717 style="margin:0px;">
<div id="ytplayer"></div>
<script type="text/javascript">
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubeIframeAPIReady()
{
player = new YT.Player('ytplayer',
{
height: 'videoHeight',
width: 'videoWidth',
videoId: 'videoID',
playerVars: { 'showinfo':0, 'rel':0 },
events: { 'onStateChange': onPlayerStateChange }
});
}
function playerDidBeginPlaying()
{
document.location.href = "fake://video-began";
}
function playerDidEndPlaying()
{
document.location.href = "fake://video-ended";
}
var done = false;
function onPlayerStateChange(event)
{
if (event.data == YT.PlayerState.PLAYING && !done)
{
done = true;
playerDidBeginPlaying();
}
else if (event.data == YT.PlayerState.ENDED)
{
playerDidEndPlaying();
}
else if (event.data == YT.PlayerState.PAUSED)
{
playerDidEndPlaying();
}
}
</script>
</body>
</html>
然后,我实现了方法webView:shouldStartLoadWithRequest:navigationType:
,以便在事件发生时得到通知
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if ([[[request URL] absoluteString] hasPrefix:@"fake://video-began"])
{
self.videoPlayingFullScreen = YES;
return NO;
}
else if ([[[request URL] absoluteString] hasPrefix:@"fake://video-ended"])
{
self.videoPlayingFullScreen = NO;
return NO;
}
return YES;
}
由于这些回调没有文档记录,我使用Javascript事件(如H2CO3所建议的)来确定视频何时开始、何时结束或何时暂停 顺便说一下,我正在使用YouTube播放器 首先,我设置UIWebview并将我的ViewController设置为代理 接下来,我将HTML文件加载到UIWebview中 Index.html
<html>
<body bgcolor=#8C1717 style="margin:0px;">
<div id="ytplayer"></div>
<script type="text/javascript">
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubeIframeAPIReady()
{
player = new YT.Player('ytplayer',
{
height: 'videoHeight',
width: 'videoWidth',
videoId: 'videoID',
playerVars: { 'showinfo':0, 'rel':0 },
events: { 'onStateChange': onPlayerStateChange }
});
}
function playerDidBeginPlaying()
{
document.location.href = "fake://video-began";
}
function playerDidEndPlaying()
{
document.location.href = "fake://video-ended";
}
var done = false;
function onPlayerStateChange(event)
{
if (event.data == YT.PlayerState.PLAYING && !done)
{
done = true;
playerDidBeginPlaying();
}
else if (event.data == YT.PlayerState.ENDED)
{
playerDidEndPlaying();
}
else if (event.data == YT.PlayerState.PAUSED)
{
playerDidEndPlaying();
}
}
</script>
</body>
</html>
然后,我实现了方法webView:shouldStartLoadWithRequest:navigationType:
,以便在事件发生时得到通知
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if ([[[request URL] absoluteString] hasPrefix:@"fake://video-began"])
{
self.videoPlayingFullScreen = YES;
return NO;
}
else if ([[[request URL] absoluteString] hasPrefix:@"fake://video-ended"])
{
self.videoPlayingFullScreen = NO;
return NO;
}
return YES;
}
这些通知没有文档记录,因此在使用时存在极大的风险,一旦发布新的操作系统更新,就会破坏应用程序。例如,
UIMoviePlayerController IDEXITFullScreenNotification
从未在iOS6上发送过。是否有记录在案的方法来检测UIWebview何时进入并将退出全屏?使用中描述的JavaScript事件。这些通知没有记录在案,因此,当他们可能被使用时,风险极高,一旦发布新的操作系统更新,就会破坏应用程序。例如,UIMoviePlayerController IDEXITFullScreenNotification
从未在iOS6上发送过。是否有记录在案的方法来检测UIWebview何时进入并将退出全屏?请使用所述的JavaScript事件。谢谢您的回答。作为观察者,我应该使用哪种方法删除自己?当使用dealloc删除通知时,请确保在init方法中附加通知,而不是在外观回调中附加通知。谢谢您的回答。作为观察者,我应该使用哪种方法删除自己?当使用dealloc删除通知时,请确保在init方法中附加通知,而不是在外观回调中附加通知。