Iphone 第一次调用时未显示动画

Iphone 第一次调用时未显示动画,iphone,ios,uianimation,Iphone,Ios,Uianimation,我有一个简单的动画: - (void)showMenu { [UIView beginAnimations:nil context:nil]; [UIView setAnimationDuration:0.5]; [UIView setAnimationDelay:0.0]; [UIView setAnimationCurve:UIViewAnimationCurveEaseOut]; self.scrollView.frame = CGRectMake

我有一个简单的动画:

- (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
    。按钮的图像会发生变化。
    滚动视图的位置
  • 我调用另一个方法来重置所有内容。按钮更改的图像。
    滚动视图的位置
  • 我调用
    showMenu
    。按钮的图像会发生变化。
    滚动视图的位置更改
  • 从现在起,每次我调用
    showmenu
第二种方法是
关闭菜单

- (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];
}

那么,为什么我只需单击两次它就可以工作呢?

如果打开了autolayout,您可能需要小心更改视图的
框架。不幸的是,当重新应用约束时(由无数看似无害的操作触发,如设置文本标签等),手动设置的
frame
将替换为受约束控制的值

在第二次调用此例程时,您可能没有看到此问题出现,因为此后您可能没有立即执行任何导致重新应用约束的操作。即使启用了autolayout,您有时也可以手动更改
,它也会起作用,但只要重新应用约束,
可能会重置

有两种解决方案:

  • 如果使用“自动布局”,则可以设置约束常数更改的动画。有关如何为约束创建
    IBOutlet
    ,然后在动画块内更改
    常量
    属性的示例,请参见的后一部分

  • 您也可以简单地禁用自动布局


  • 当我执行UIAnimation并同时以编程方式添加UITableView时,我也遇到了同样的问题。UIView的框架会更改,但不会在显示中更新。 要解决此问题,请使用调用您的方法

    大宗报价

    -性能选择器:withObject:afterDelay:延迟为0。


    它将解决您的问题。

    是的,自动布局已打开,但为什么在第二次使用后仍能工作?即使重新加载ui,也不会出现问题和抱怨?我建议不要使用自动布局。它最终是一个更痛苦的比它是值得否认自动布局解决了这个问题