簡體   English   中英

第一次調用時未顯示動畫

[英]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可能會重置。

有兩種解決方案:

  1. 如果使用自動布局,您可以動畫化約束常量的變化。 有關如何為約束創建IBOutlet然后更改動畫塊內的constant屬性的示例,請參閱此答案的后半部分。

  2. 您也可以簡單地禁用自動布局。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM