MPMoviePlayerController 缩放模式在 iPad 横向模式下不起作用

Posted

技术标签:

【中文标题】MPMoviePlayerController 缩放模式在 iPad 横向模式下不起作用【英文标题】:MPMoviePlayerController scaling mode is not working in the iPad Landscape mode 【发布时间】:2012-09-04 09:27:25 【问题描述】:

我正在使用 MPMoviePlayerController 播放直播视频,我使用的代码是

[_moviePlayerController.view setFrame:self.view.bounds];
[_moviePlayerController prepareToPlay];
_moviePlayerController.fullscreen=YES;
_moviePlayerController.controlStyle = MPMovieControlStyleNone;
[_moviePlayerController setFullscreen:YES animated:YES];
[self.view addSubview:_moviePlayerController.view];

视频正在各个方向播放。但我在电影播放器​​顶部添加了一个按钮,可让您缩放视频。

我知道在媒体播放器框架中,我们有 MPMovieScalingModeNone、MPMovieScalingModeAspectFit、MPMovieScalingModeAspectFill 和 MPMovieScalingModeFill 类型的缩放模式选项。 按下按钮时,我将缩放模式设置为 MPMovieScalingModeAspectFill ,第二次按下 MPMovieScalingModeAspectFit 时。 这在 iPhone 中也很有效。但是当我使用 iPad LANDSCAPE Mode 时无法进行任何缩放操作。当 iPad 处于横向模式时,我也无法使用适合或填充缩放模式。

为什么?可能是什么原因?

【问题讨论】:

【参考方案1】:

如果视频纵横比已经完全适合显示(视图)纵横比,则任何适合/填充操作都不会产生任何效果。这是设计使然,不是问题。

一旦出现如此完美的配合,您应该隐藏或禁用该按钮。要将视频纵横比与视图的纵横比进行比较,请使用播放器的 naturalSize 属性。

naturalSize

影片帧的宽度和高度。 (只读)

@property (nonatomic, readonly) CGSize naturalSize

讨论

此属性以正方形报告视频的干净光圈 像素。因此,报告的尺寸考虑了变形 内容和光圈模式。

电影的自然大小可能会在播放过程中发生变化 回放。这通常发生在流媒体的比特率 内容发生变化或播放在纯音频和音频之间切换时 音频和视频的结合。

【讨论】:

我想我必须隐藏按钮。我没有其他选择。 :(。我试着 NSLog 你所说的。就像 _moviePlayer.naturalsize 一样,在打印宽度和高度时,我得到的值为 640 x 480。 1024x768 的纵横比为 1.33333,而 640x480 的纵横比也为 1.33333 => 完美匹配。【参考方案2】:

你可以像这样提供随机缩放:

[UIView animateWithDuration:0.5 delay:0 options:UIViewAnimationOptionCurveEaseOut animations:^

  moviePlayer.view.transform = CGAffineTransformMakeScale(0.7f, 0.7f);

 completion:^(BOOL finished)
    // if you want to do something once the animation finishes, put it here
];

【讨论】:

以上是关于MPMoviePlayerController 缩放模式在 iPad 横向模式下不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何显示 MPMoviePlayerController 控件?

MPMoviePlayerController 隐藏 AirPlay 按钮

MPMoviePlayerController 上的专辑封面

MPMoviePlayerController 已弃用,现在怎么办?

用 MPMoviePlayerController 替换 AVPlayer

“MPMoviePlayerController”的“initialPlaybackTime”不起作用