我需要在MPMoviePlayerViewController的顶部工具栏上添加一个标题,如果正在播放视频,用户点击应隐藏标题,就像它隐藏任何其他控件一样。
目前我正在添加UILabel作为moviePlayer视图的子视图。虽然这种方法在顶栏上添加了一个标题(我相应地设置了框架),但是当用户点击屏幕时它不会隐藏标题。
有没有直接的api / hack可以通过它访问MPMoviePlayerViewController的顶部工具栏?我想,如果我可以添加标题作为顶部工具栏的子视图,隐藏过程将由MPMoviePlayerViewController处理。有什么想法吗?
提前致谢!
答案 0 :(得分:3)
请注意,我的回答是MPMoviePlayerController
,而不是MPMoviePlayerViewController
。我建议您直接或通过MPMoviePlayerViewController
上的参考使用它。
首先,永远不要在MPMoviePlayerController
的视图上直接添加任何内容。这很容易产生各种奇怪的副作用,在文档中明确建议不要这样做。而是使用其backgroundView
来托管您的自定义内容或MPMoviePlayerController
的父view
(使其成为兄弟姐妹)。
但话又说回来,如果用户点击或只是等待,这将无法解决您所描述的具有该视图/标签/与控件一起重新出现的问题。
有很多方法可以做到这一点,但我担心这些都处于灰色地带 - 换句话说,有可能被Apple拒绝。事实上,它不仅仅是一个灰色区域,而且明显违反了Apple的开发指南。
就是说,我过去曾在主要应用上使用过这个技巧,但从未被发现/拒绝过。
首先,您需要找到MPMoviePlayerController实例的接口视图。
/**
* This quirky hack tries to locate the interface view within the supposingly opaque MPMoviePlayerController
* view hierachy.
* @note This has a fat chance of breaking and/or getting rejected by Apple
*
* @return interface view reference or nil if none was found
*/
- (UIView *)interfaceView
{
for (UIView *views in [self.player.view subviews])
{
for (UIView *subViews in [views subviews])
{
for (UIView *controlView in [subViews subviews])
{
if ([controlView isKindOfClass:NSClassFromString(@"MPInlineVideoOverlay")])
{
return controlView;
}
}
}
}
return nil;
}
UIView *interfaceView = [self interfaceView];
现在您已获得该实例,只需将您的视图/标签/其他内容添加到该视图中即可。
[interfaceView addSubview:myAwesomeCustomView];