iOS 8视频进度条不可见

时间:2015-01-13 15:08:53

标签: objective-c ios8 mpmovieplayercontroller

我有一个iOS应用,我试图使用MPMoviePlayerController显示视频。 代码非常简单,并且在iOS版本大于6.0的所有设备上都能正常运行。

但问题出在iOS 8和8.1上,视频的进度条不可见,如下图所示。

enter image description here

我不明白为什么会发生这种情况,或者是iOS 8的错误。

请建议。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我的应用程序中也有这个问题,它支持多个iOS版本,但这个问题确实只在iOS 8上可见。

我的代码在MPMoviePlayerControllercontrolStyle之间切换MPMovieControlStyleEmbedded MPMovieControlStyleNone,这是使用UIDeviceOrientationDidChangeNotification触发的。我必须承认我以编程方式旋转我的播放器,我不会旋转应用程序;这可能是这个问题的根源。我以纵向显示控件,并将它们隐藏在横向中。

我显然分两步解决了这个问题。我没有在一个简单的应用程序中分离出这个问题,所以如果解决方案对每个人都不准确,我会道歉。

首先,脏的部分,,也许并非每个遇到此问题的人都需要,我会解析一些玩家子视图来照顾MPVideoPlaybackOverlayView查看,以强制其可见性或隐形。

// Helps to hide or show the controls over the player
// The reason of this method is we are programmatically rotating the player view, while not rotating the application
// On latest iOS, this leads to misbehavior that we have to take into account
-(void)showMPMoviePlayerControls:(BOOL)show
{
    self.player.controlStyle = (show ? MPMovieControlStyleEmbedded : MPMovieControlStyleNone);
    if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8"))
    {
        // Workaround to avoid persistence of empty control bar
        for(UIView *subView in self.player.backgroundView.superview.superview.subviews)
        {
            if ([subView isKindOfClass:NSClassFromString(@"MPVideoPlaybackOverlayView")]) {
            subView.backgroundColor = [UIColor clearColor];
                subView.alpha = (show ? 1.0 : 0.0);
                subView.hidden = (show ? NO : YES);
            }
        }
    }
}

但这还不够。可能是因为纵向模式有几个方向(UIDeviceOrientationPortraitUIDeviceOrientationFaceUp,...)触发通知,因此控制样式更改请求。

因此,我的修复的第二步是为了处理这样一个事实,即如果我们已经在MPMoviePlayerController controlStyle,则无需更改// Set embedded controls only when there is a transition to portrait, i.e. if status bar was hidden if ([[UIApplication sharedApplication] isStatusBarHidden]) { [self showMPMoviePlayerControls:YES]; // and we show the status bar here [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide]; } controlStyle正确的屏幕方向。 就我而言,解决方案是验证状态栏是否隐藏,因为我将其隐藏在横向中:

controlStyle

这里的要点可能是我们不应该设置{{1}},如果它已经设置为所需的值。

由于这解决了我的问题,我停止了我的调查。无论如何,我认为在大多数情况下它可能更简单。当然与{{1}}在错误的时间更改或更改但已经处于通缉状态的事实有关。