最近由于项目原因需要自定义MPMoviePlayerController,直接在player的的view上面加载其他控件的话,控件是能加上去,但是不能随着player自带的控制试图消失而消失,最后逼不得已打印出来了player的所有子视图,分析出player的试图结构如下图(该结构图是ios6之前的结构图,ios6之后有点变化)。
上图中从上到下是试图的层次,上面的是父视图,下面的是其紧挨上层的子视图。同一层从左到右的顺序是视图在父视图的subviews中的排列顺序。括号内是说明试图的类型。实际上自定义时只用到两个视图MPFullScreenTransportControls和MPCenteringNavigationBar这两个视图,他们分别是播放器下方的声音控制所在的视图和上方的完成按钮所在的navigationbar。获取MPFullScreenOverlay的方法:
1.我们只需要通过[[player.backgroundView.superview subviews ] objectAtIndex:2];就可以获得MPFullScreenOverlay视图(只适合ios6之前版本)
2.调用[self readSubviews:player.view](ios6和之前都可以获取)
- (void)printSubviews:(UIView *)view {
for (UIView *aView in [view subviews])
{
if ([aView isKindOfClass:NSClassFromString(@"MPFullScreenVideoOverlay")]) {
overlayView = aView;
return;
}
[self printSubviews:aView];
}
}
然后通过MpFullScreenOverlay的subviews就可以获得我们需要的两个视图MPFullScreenTransportControls和MPCenteringNavigationBar,然后直接在这两个视图上操作就可以了。MPFullScreenTransportControls和MPCenteringNavigationBar这两个试图上的一些控件不能更改,但是你可以设置这些控件的hidden属性,让他们隐藏,你就可以自定义一些控件添加上面,这样就可以自定义MPMoviePlayerController的试图了。当然你可以自定义所有的视图,只需要将MPFullScreenOverly的所有子视图隐藏,然后创建新的视图添加到MPFullScreenOverly视图上就可以了。
转自:http://blog.youkuaiyun.com/zzfsuiye/article/details/7790093