[英]Animation not Shown When Calling it First Time
我有一個簡單的動畫:
- (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];
}
那么為什么當我單擊它兩次時它才起作用呢?
當我執行UIAnimation
並同時以編程方式添加UITableView
時,我遇到了同樣的問題。 UIView
的框架發生了變化,但它不會在顯示中更新。
要解決此問題,請使用performSelector:withObject:afterDelay:
調用您的方法,延遲為 0。
如果您打開了自動布局,您可能需要警惕更改視圖的frame
。 不幸的是,當重新應用約束時(由無數看似無害的操作觸發,例如設置文本標簽等),您手動設置的frame
將被約束控制的值替換。
第二次調用此例程時,您可能不會看到此問題出現,因為此后您可能沒有立即執行導致重新應用約束的任何操作。 即使啟用了自動布局,有時您也可以手動更改frame
,它會起作用,但是一旦重新應用約束, frame
可能會重置。
有兩種解決方案:
如果使用自動布局,您可以動畫化約束常量的變化。 有關如何為約束創建IBOutlet
然后更改動畫塊內的constant
屬性的示例,請參閱此答案的后半部分。
您也可以簡單地禁用自動布局。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.