电影播放器​​控件可见/隐藏时的通知?

时间:2012-07-19 12:19:13

标签: ios uikit mpmovieplayercontroller nsnotifications

我只是想知道当播放控件可见或隐藏时是否可以收到通知?

例如,我想呈现一个带有样式的视频:

self.moviePlayerController.controlStyle = MPMovieControlStyleEmbedded;

视频开始播放时,播放控件可见并自动消失。如果用户只是选中了视频,则会显示控件。

我需要通知,以便我可以调整视图(重新定位MPMoviePlayerController视图下的其他一些按钮。 那可能吗?因为遗憾的是我没有在文档中找到任何内容。

1 个答案:

答案 0 :(得分:5)

我担心这些事件没有记录通知。

您可能很幸运并通过嗅探所有发布的通知来查找内容,如以下答案所示:

Trapping and tracing all notifications

How to receive NSNotifications from UIWebView embedded YouTube video playback


然而,有一种方法可以简单地将您的控件与MPMoviePlayerControler的控件链接起来。这种方式绝对没有记录,并且在尝试在iTunes上销售您的应用程序时确实存在被拒绝的强大风险。

首先,您需要在MPMoviePlayerController中找到界面视图,当使用嵌入式界面时,该视图直到今天由一个名为MPInlineVideoOverlay的类表示。请再次注意,由于Apple可能决定使用不同的命名,因此他的这个机会很大或有突破性。

/**
 * This quirky hack tried 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 *)interfaceViewWithPlayer:(MPMoviePlayerController *)player
{
    for (UIView *views in [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 addSubview:将自己的添加内容添加到其中的界面上 一旦你这样做,你的控件将成为播放器界面的一部分,与它一起显示和隐藏(同时也遵守所有动画等)。