iOS - 导航栏内的动画不起作用

时间:2015-09-03 14:25:28

标签: ios objective-c animation uinavigationbar quartz-core

我有一个场景,我需要在导航栏中添加动画,但模拟器没有动画效果。我添加一个UIView,添加一个标签/文本字段并为约束创建出口,并用" UIView animateWithDuration:"更新它们。相反,模拟器只是更新约束并相应地显示视图,但没有任何动画。我通过修改约束和框架(单独)来尝试它。

[self.view layoutIfNeeded];
[UIView animateWithDuration: 3
                      delay: 0.0
                    options: UIViewAnimationOptionCurveEaseInOut
                 animations: ^{
                     self.constraint.constant += 60;
                     NSLog(@"inside animation");
                     [self.view layoutIfNeeded];
                 }
                 completion:nil];

当我通过" 60"增加宽度约束时显示。在viewDidLoad :.它出现了非动画。

viewDidLoad, update - yes, but no animation

当我通过点击按钮配置约束(通过" 60"增加宽度)时,即使静态更新也不会发生。

button click, no update, no animation

相同的代码在UIView内的导航栏外完美运行。

感谢任何帮助...

3 个答案:

答案 0 :(得分:0)

如果您的导航栏包含一些动画,那么您可以尝试绘制自定义导航栏。这就是你要做的事情:

  1. viewDidLoad()方法的视图控制器中添加以下代码

    self.navigationController.navigationBarHidden = YES;

  2. 之后使用UIView创建一个自定义导航栏,其框架已调整为可见且顶部。

  3. 之后在视图上添加组件并开始使用动画。

答案 1 :(得分:0)

好的,我终于解决了这个问题。呼...

我做的是......

  1. 添加了一个视图来代替barButtonItem(让我们称之为“superView”)并在其上添加另一个视图(让我们称之为“subView”),以便我得到以下配置。
  2. enter image description here

    1. 在子视图和它上面的对象之间设置了约束。现在,我为superView和subView创建了outlet(superView和subView),使它们透明(当然是可选的)。

      有用的注意事项:将superView的宽度设置为默认的条形按钮项目的宽度,将subView的宽度设置为屏幕宽度。在superView上禁用“剪辑子视图”,但在子视图上启用。

    2. 根据需要在我想要的地方添加了动画,但在“superView”上添加了layoutIfNeeded,而不是父视图。

      [self.superView layoutIfNeeded];
      
    3. 祝你好运。

答案 2 :(得分:0)

你可以通过自定义UIView并创建宽度NSLayoutConstraint出口来实现它,在代码中你可以通过在调用动画代码之前调用UpdateConstraintsIfNeeded或UpdateViewConstraints方法来处理这个变量的常量属性