【问题标题】:Animate status bar alongside custom transition in segue在 segue 中与自定义过渡一起动画状态栏
【发布时间】:2017-12-29 17:45:41
【问题描述】:

我有两个 ViewControllers,使用第一个的自定义 segue,我展示了第二个,带有自定义动画器和基于百分比的交互器。

我想在控制器转换旁边向上滑动状态栏。

在第二个ViewController我有这个是为了隐藏状态栏

override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
        return .slide
    }

override var prefersStatusBarHidden: Bool {
        return true
    }

我知道我应该在动画块中调用setNeedsStatusBarAppearanceUpdate() 以对其进行动画处理,并使用UIViewControllerTransitionCoordinator 方法animateAlongsideTransition: 使其跟随过渡,但我不确定应该在哪里调用此方法.

我尝试了第二个控制器的viewWillAppear 方法,但它仍然没有动画立即消失。

什么地方合适?

【问题讨论】:

  • 您可以发布您正在使用的代码:animate(alongsideTransition 吗?
  • 这就是问题所在,我知道我应该使用它的一些变体,但不知道如何使用它。
  • 我明白了,考虑一下slide 动画一旦开始,就无法停止/调整它。
  • 所以唯一的办法就是让它发生而不是控制它?

标签: ios swift uikit statusbar


【解决方案1】:

你看不到动画的原因是因为在你的第二个视图控制器中你总是将true返回到prefersStatusBarHidden,然后这样的视图控制器以那个条件开始,因此没有任何“机会”播放动画。

所以在第二个视图控制器中你可以尝试这样做:

class ViewController2: UIViewController {
  override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { get { return .slide } }
  override var prefersStatusBarHidden: Bool { return statusBarHidden }
  var statusBarHidden = false

  override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    self.statusBarHidden = true
    UIView.animate(withDuration: 0.35) {
      self.setNeedsStatusBarAppearanceUpdate()
    }
  }
}

此外,在您的Info.plist 中一定要有View controller-based status bar appearance= YES

【讨论】:

  • 不幸的是,这不会使动画与我的过渡同步
  • 请问你为什么需要UIViewControllerTransitionCoordinator
  • 我希望状态栏的动画与 segue 转换一起发生,并且我不能将时间设置为相同,因为我有一个交互器并且可以使用手势拖动转换。
  • 这对我有用,尽管我在 viewWillAppear 中设置了动画 + setNeedsStatusBarAppearanceUpdate()。这是一个很好的答案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 2014-03-04
  • 2012-06-01
  • 1970-01-01
  • 2012-06-02
相关资源
最近更新 更多