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,也不会出现问题和抱怨?我建议不要使用自动布局。它最终是一个更痛苦的比它是值得否认自动布局解决了这个问题