【问题标题】:Animation not Shown When Calling it First Time第一次调用时不显示动画
【发布时间】:2013-06-25 15:44:13
【问题描述】:

我有一个简单的动画:

- (void)showMenu
{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationDelay:0.0];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

    self.scrollView.frame = CGRectMake(296, -150, 432, 356);

    [self.buttonMenu setImage:[UIImage imageNamed:@"menu_arrow_up.png"] forState:UIControlStateNormal];
    [self.view bringSubviewToFront:self.scrollView];

    [UIView commitAnimations];
}

当我第一次调用这个动画时,只是我按钮的图像发生了变化, 我的滚动视图的位置没有改变。

在我两次调用showMenu 方法后,一切正常。

  • 我打电话给showMenu。按钮的图像发生变化。 scrollview的位置不是
  • 我调用了另一种方法来重置所有内容。按钮更改的图像。 scrollview的位置不是
  • 我打电话给showMenu。按钮的图像发生变化。 scrollview 的位置发生变化
  • 从现在开始,每次我拨打showmenu时它都会起作用

第二种方法是closeMenu:

- (void)closeMenu
{
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationDelay:0.0];
    [UIView setAnimationCurve:UIViewAnimationCurveEaseOut];

    self.scrollView.frame = CGRectMake(296, -317, 432, 356);

    [self.buttonMenu setImage:[UIImage imageNamed:@"menu_arrow_down.png"] forState:UIControlStateNormal];

    [UIView commitAnimations];
}

那为什么我点击两次它就起作用了?

【问题讨论】:

  • 是的,自动布局已开启
  • 但为什么第二次使用后它仍然有效?即使我重新加载用户界面也没有问题和抱怨?
  • 我建议不要使用自动布局。它最终比它的价值更痛苦
  • 禁用自动布局解决了问题

标签: iphone ios uianimation


【解决方案1】:

当我执行UIAnimation 并同时以编程方式添加UITableView 时,我遇到了同样的问题。 UIView 的框架发生变化,但不会在显示中更新。

要解决此问题,请使用 performSelector:withObject:afterDelay: 调用您的方法,延迟为 0。

【讨论】:

    【解决方案2】:

    如果您启用了自动布局,您可能需要谨慎更改视图的frame。不幸的是,当重新应用约束时(由无数看似无害的操作触发,例如设置文本标签等),您手动设置的 frame 将被约束控制的值替换。

    第二次调用此例程时,您可能不会看到此问题本身,因为此后您可能没有立即执行任何导致重新应用约束的操作。即使启用了自动布局,您有时也可以手动更改frame,它会起作用,但一旦重新应用约束,frame 可能会被重置。

    有两种解决方案:

    1. 如果使用自动布局,您可以动画约束常量的变化。有关如何为约束创建IBOutlet 然后在动画块中更改constant 属性的示例,请参见this answer 的后半部分。

    2. 您也可以简单地禁用自动布局。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-20
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多