【问题标题】:iOS MPMoviePlayerViewController - How to dismiss when app is sent to background?iOS MPMoviePlayerViewController - 当应用程序发送到后台时如何关闭?
【发布时间】:2012-07-17 16:54:12
【问题描述】:

我有一个使用子类 MPMoviePlayerViewController 播放视频剪辑的应用程序,我想确保在用户离开应用程序时(当它进入后台时)关闭电影播放器​​。 这是必要的,因为当他们重新进入应用程序时,它似乎没有正确加载电影 URL,因此他们得到一个不断加载的空白电影播放器​​。

通常,当按下完成按钮时,我会使用 [self dismissMoviePlayerViewControllerAnimated] 关闭电影播放器​​。

当应用程序退出活动(或移至后台)时,关闭播放器的正确方法是什么?

【问题讨论】:

    标签: ios mpmovieplayercontroller


    【解决方案1】:

    好的,当应用程序即将发送到后台时,我最终使用通知来“清理”我的 MPMoviePlayerViewController。这使我可以检测应用程序何时将从我的应用程序委托以外的类发送到后台。

    因此,当我创建电影播放器​​时,我添加了观察者以在应用程序发送到后台时调用我的“清理”函数。

    (旁注 - 我还使用了一个观察者来防止在视频结束后自动关闭电影视图。这样用户必须按下“完成”按钮。该按钮还调用了 moviePlayerCleanup 方法。这确保了观察者总是被正确删除)

    - (IBAction)buttonVideo:(id)sender {        
    
        // Register Movie Player for UIApplicationWillResignActiveNotification
        [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(moviePlayerCleanup) name: UIApplicationWillResignActiveNotification object: nil];
    
    /*...set video URL, options, add to subview, etc etc here....*/
    }
    -(void)moviePlayerCleanup{
        // Remove the movie player view controller from the ApplicationWillResign notification observers
        [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil];    
        //Dismiss view
        [self dismissMoviePlayerViewControllerAnimated];
    }
    

    【讨论】:

      【解决方案2】:

      好吧,经过搜索,我在 SO 中找到了这个答案: dismiss a modalviewcontroller when the application enters background 基本上,你为 UIApplicationDidEnterBackgroundNotification 通知设置了一个 NSNotificationCenter 观察者,选择器将调用视图控制器的关闭。

      看看答案,它有代码sn-ps。

      希望这行得通。

      【讨论】:

      • 试过了。这些函数甚至没有被调用(尝试输出一个简单的 NSLOG 并且没有结果)
      • 根据我的发现,这是自动的,如果您希望它在按下主页按钮时继续播放,那么您应该执行其他操作。也许问题出在 viewDidLoad 函数中?视图控制器的初始化?
      • 好吧,问题是当应用程序退出(发送到后台)时,它确实停止了电影。很好,但问题是,当重新进入应用程序时,电影播放器​​只是坐在那里,黑屏和“加载”指示器。从不重新加载电影。当应用程序退出后台时,我想完全“关闭”电影播放器​​视图。
      • 谢谢啦啦啦啦。当应用程序被发送到后台时,我最终使用观察者调用方法。这样我就可以直接从我的班级而不是应用程序委托中调用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      相关资源
      最近更新 更多