14

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

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

我尝试了以下方法:

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

我没有给出 MPVolumeView 和 MPMoviePlayerController 的参考。但是,如果 MPMoviePlayerController 的“allowsAirPlay”设置为 YES,则 MPVolumeView 上会显示 AirPlay 按钮。MPVolumeView 和 MPMoviePlayerController 有什么关系?这两个独立创建的类之间有什么联系?

4

4 回答 4

10

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

由于可能有很多制衡(并且他们喜欢一致的 UI),Apple 只允许您使用他们的 AirPlay 按钮/UI 来利用此功能。但是,您可以将该按钮放在任何您想要的位置:

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

我只是猜测宽度,高度是 40,40,我确定它不正确,但是一旦我把按钮放在适当的位置就没有关系了。

于 2011-08-08T21:03:50.897 回答
2
for (UIButton *button in volumeView.subviews) {
if ([button isKindOfClass:[UIButton class]]) {
    [button setImage:[UIImage imageNamed:@"custom-route-button.png"] forState:UIControlStateNormal];
    [button sizeToFit];
}}

我想这会对你有所帮助。

于 2011-06-03T08:07:44.943 回答
2

MPVolumeView 有一个属性来隐藏音量滑块并显示 Route 按钮。所以没有必要遍历隐藏东西的视图。

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

AirPlay (Route) 按钮的位置可能不是您所期望的,因此您可能需要稍微播放一下容器视图的框架才能将其放置在您想要的位置。

于 2012-02-25T19:27:49.443 回答
0

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

于 2011-06-03T12:18:10.663 回答