【问题标题】:MPMoviePlayerController can exit fullscreen but topbar is goneMPMoviePlayerController 可以退出全屏但顶部栏不见了
【发布时间】:2010-12-27 21:02:34
【问题描述】:

我正在使用 MPMoviePlayerController 在 iPad 上播放电影。

当用户将设备旋转为横向时,我将其设置为全屏

如果用户随后点击“退出全屏”或“完成”,电影将动画回到它的小帧(本机行为),但是-- 顶部栏(导航栏)消失了。此外,可见视图已向上移动,位于状态栏的后面和之外。

请注意,我没有触及顶部栏。我没有手动隐藏它。

我尝试通过将setNavigationBarHidden:animated 发送到当前视图控制器的导航控制器以及标签栏控制器的导航控制器来重新获得导航栏。我把它作为对MPMoviePlayerDidExitFullscreenNotification(它触发)的回应。没有效果。但是,如果我们旋转回纵向,它会立即返回。

我的问题是:

  • 为什么用户退出全屏后顶部栏不返回?
  • 我们怎样才能让顶部栏恢复原状?

最好的问候, 蒂莫

附:我将继续尝试this SO 帖子中描述的怪异之处。可能是相关的。

【问题讨论】:

  • 你有没有得到任何牵引力?我也有同样的问题。
  • @bradheintz 啊,是的,让我在下面回答我自己的问题。

标签: mpmovieplayercontroller uinavigationbar fullscreen


【解决方案1】:

由于这似乎是 Apple 的 SDK 中的一个错误(请阅读下面的帖子脚本),我已经解决了它。

收到MPMoviePlayerDidExitFullscreenNotification后,请执行以下步骤:

  1. 发送[setNavigationBarHidden:YES animated:NO]到导航栏。
  2. 发送[setNavigationBarHidden:NO animated:YES]到导航栏。

会有一个小故障,即动画条向下移动。不过,这比您的酒吧消失而用户惊奇地离开要好得多!

animated:YES 似乎有必要让栏(重新)设置它的位置(而不仅仅是它的可见性)。

您可以尝试使用-performSelector:withObject:afterDelay: 在 0 或 0.1 秒延迟后立即显示 (animated:NO)。您可能仍然需要先启动动画,否则栏不会调整其位置。

干杯, 蒂莫

附:这似乎是 SDK 中的一个错误。例如,如果您运行 TED iPad 应用程序,您也可以在其中重现它。这些步骤大致如下:播放视频,捏到全屏,将 iPad 旋转到横向,按下完成。尝试一下,您应该会看到导航栏消失了。

【讨论】:

    【解决方案2】:

    我刚刚找到了一种更好的方法(从视图控制器返回时不会出现故障)。 进入全屏时隐藏导航栏,退出时再次显示:

    // In the view did load for example :
    [[NSNotificationCenter defaultCenter] addObserver:self
         selector:@selector(moviePlayerWillExitFullScreen:) 
        name:MPMoviePlayerWillExitFullscreenNotification 
        object:nil];
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayerDidEnterFullScreen:) name:MPMoviePlayerDidEnterFullscreenNotification object:nil];
    
    // And in the ViewController put these methods :
    - (void) moviePlayerWillExitFullScreen:(id)sender {
        [self.navigationController setNavigationBarHidden:NO animated:NO];
    }
    
    - (void)moviePlayerDidEnterFullScreen:(id)sender {
        [self.navigationController setNavigationBarHidden:YES animated:YES];
    }
    

    这只会在动画中更加流畅。

    【讨论】:

      【解决方案3】:

      第一个假设可能是问题出在[MPMoviePlayerControler setFullScreen] 上,我的也是。 但在仔细查看后,我发现问题出在 Apple 提供的 MPMoviePlayerController(Play,Pause,Done 等) 控件上。 Apple 将控件模式设置为默认控件。当我们旋转设备时,控件应该根据屏幕的新尺寸进行更改,这不会发生。 因此,我们应该在旋转设备时刷新控件。

      以下是对我执行相同操作的代码:

      //set the mode of controls before playing movie or when view loads
      -(void) playMovie:(UIButton *)btn {      
          mpmpController.controlStyle=MPMovieControlStyleEmbedded;
      }
      
      
      - (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toIO
                                      duration:(NSTimeInterval)duration {
           //this sets the controls to None
           mpmpController.controlStyle=MPMovieControlStyleNone;    
      }
      
      - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromIO {
          //reset the controlStyle
          mpmpController.controlStyle=MPMovieControlStyleEmbedded; 
      }
      

      这将完美地完成任务。 至少它为我做到了。

      【讨论】:

      • 非常好。如果我能解决这个问题,我会试试这个。我喜欢您的解决方案 - 感谢您发布!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 2014-03-21
      • 2016-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多