我通过例如去苹果“iPhone上的MoviePlayer”
我试着去覆盖上的MPMoviePlayerController的顶部,
它完美的作品与视频剪辑是捆绑,
但如果我流从URL视频不会工作。
覆盖视图只会得到隐藏玩家后面。
有没有办法带来的叠加视图高达面前?
我通过例如去苹果“iPhone上的MoviePlayer”
我试着去覆盖上的MPMoviePlayerController的顶部,
它完美的作品与视频剪辑是捆绑,
但如果我流从URL视频不会工作。
覆盖视图只会得到隐藏玩家后面。
有没有办法带来的叠加视图高达面前?
的MPMoviePlayerController创建其自己的窗口,并设置为关键窗口 - 你可能知道这个已经从MoviePlayer示例应用程序。
我不知道为什么,但有当玩家使用流的延迟 - 这样的keyWindow你之后,你初始化球员很可能不是玩家的窗口,因为这似乎得到以后增加。
你可以“欺骗”,并用一个定时器,几秒钟后让播放器窗口,并添加您的叠加:
[NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(addMyOverlay:) userInfo:nil repeats:FALSE]
或者你可以监听UIWindowDidBecomeKeyNotification事件,并执行相同的:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyWindowChanged:) name:UIWindowDidBecomeKeyNotification object:nil];
无论选择是伟大的(我很想知道一个更清洁的方式来做到这一点),但它能够完成任务。
当您收到“MPMoviePlayerContentPreloadDidFinishNotification”通知您可以覆盖你的看法。
注册通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePreloadDidFinish:)
name:MPMoviePlayerContentPreloadDidFinishNotification
object:nil];
收到通知时添加叠加图:
// Notification called when the movie finished preloading.
- (void) moviePreloadDidFinish:(NSNotification*)notification
{
NSArray *windows = [[UIApplication sharedApplication] windows];
if ([windows count] > 1)
{
// Locate the movie player window
UIWindow *moviePlayerWindow = [[UIApplication sharedApplication] keyWindow];
if ([moviePlayerWindow viewWithTag:0x3939] == nil) {
self.videoOverlayView.tag = 0x3939;
[moviePlayerWindow addSubview:self.videoOverlayView];
}
[moviePlayerWindow bringSubviewToFront:self.videoOverlayView];
}
}
一个非常简单的解决方案:
appDelegate.window.backgroundColor = [UIColor clearColor];
appDelegate.window.windowLevel = 2;
这将保持在视频窗口的顶部您的应用程序UI。
我的文章
以前的答案是基于定时器。 &固定5秒。
当电影播放的开始,一个新的窗口添加到应用程序。
使用定时器来确认天气新窗口添加到您的应用程序或没有。
当添加一个窗口(电影播放器窗口)。 设置通知。
-(void)viewDidLoad{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePreloadDidFinish:)
name:MPMoviePlayerContentPreloadDidFinishNotification
object:nil];
// Register to receive a notification when the movie has finished playing.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(moviePlayBackDidFinish:)
name:MPMoviePlayerPlaybackDidFinishNotification
object:nil];
// Register to receive a notification when the movie scaling mode has changed.
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(movieScalingModeDidChange:)
name:MPMoviePlayerScalingModeDidChangeNotification
object:nil];
videoListController.xmlClassVideoList=t;
// here ttttt is a timer declared in .h file
tttttt=[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(startMy) userInfo:nil repeats:YES];
}
-(void)startMy{
NSArray *windows = [[UIApplication sharedApplication] windows];
NSLog(@"%i",[windows count]);
// depends on your application window
// it may be 1/2/3
if ([windows count] > 3) {
// Locate the movie player window
[tttttt invalidate];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyWindowChanged:) name:UIWindowDidBecomeKeyNotification object:nil];
}
}