AirPlay支持,MPMoviePlayerController和MPVolumeView关系

时间:2011-04-20 13:19:09

标签: iphone mpmovieplayercontroller relation airplay mpvolumeview

我正在开发支持视频播放的iPhone应用程序。我正在使用MPMoviePlayerController和自定义控件来播放视频。为此,我将MPMoviePlayerController的控件样式设置为MPMovieControlStyleNone。

我想为正在播放的视频支持AirPlay功能。根据文档,我们必须将MPMoviePlayerController的'allowsAirPlay'属性设置为YES以启用AirPlay功能。如果我使用带有自定义控件的MPMoviePlayerController,如何在播放器UI上显示AirPlay按钮?

我尝试了以下内容:

  1. 实例化MPVolumeView
  2. 将MPVolumeView的showsRouteButton和showsVolumeSlider属性设置为NO以隐藏音量滑块和路线按钮
  3. 在我的自定义播放器视图
  4. 上添加了MPVolumeView

    我没有相互给出MPVolumeView和MPMoviePlayerController的引用。 但是,如果MPMoviePlayerController的'allowsAirPlay'设置为YES,那么AirPlay按钮将显示在MPVolumeView上。 MPVolumeView和MPMoviePlayerController如何相关?请让我知道这两个独立创建的类之间的联系。

    谢谢和问候, 迪帕

4 个答案:

答案 0 :(得分:10)

由于MPMoviePlayerController仅允许您一次播放一个视频,因此MediaPlayer框架始终知道正在播放的视频。这就是MPVolumeView了解MPMoviePlayerController的方式。我没有正式的文档,但我认为它以这种方式融入框架。

由于可能会进行大量的检查和平衡(并且他们喜欢一致的用户界面),Apple只允许您使用他们的AirPlay按钮/ UI来使用此功能。但是,您可以将该按钮放在任何位置:

airplayButton = [[MPVolumeView alloc] init];
airplayButton.frame = CGRectMake(myX, myY, 40, 40);
[airplayButton setShowsVolumeSlider:NO];
[customPlayerControls.view addSubview:airplayButton];

我猜测宽度,高度为40,40,我确定它不正确,但是一旦我按下按钮就无所谓了。

答案 1 :(得分:2)

for (UIButton *button in volumeView.subviews) {
if ([button isKindOfClass:[UIButton class]]) {
    [button setImage:[UIImage imageNamed:@"custom-route-button.png"] forState:UIControlStateNormal];
    [button sizeToFit];
}}

我认为这会对你有帮助。

答案 2 :(得分:2)

MPVolumeView具有隐藏音量滑块和显示“路线”按钮的属性。所以没有必要遍历隐藏事物的视图。

MPVolumeView *volumeView = [[[MPVolumeView alloc] initWithFrame:myContainerView.bounds] autorelease];
volumeView.showsVolumeSlider = NO;
volumeView.showsRouteButton = YES;
[myContainerView addSubview:volumeView];

AirPlay(路线)按钮的位置可能不是您所期望的,因此您可能需要稍微播放容器视图的框架以使其达到您想要的位置。

答案 3 :(得分:0)

答案是:你做不到。 iOS 4.3中没有官方方法为Airplay提供您自己的控件 - 如果您需要该功能,则需要使用标准控件。