2014-09-10 127 views
17

我目前正在測試我的應用程式iOS 8的發佈我發現後,我進行動畫塊,動畫重置如果我更新任何標籤的文本之後。我用下面的一個方法運行了一個簡單的例子。運行此示例的結果如下:動畫塊復位到原來的位置更新文本

  • 單擊myButton第一次 - 動畫運行但在標籤文本更改時重置。
  • 點擊myButton第二次 - 動畫運行,但不會恢復到原來的位置。

看起來這是因爲標籤文本不會更改。如果我完全刪除了更新文本的行,這也會阻止動畫在最後重置。

我想解決這個問題,這樣的方式運行時,標籤的文本可以無需重新設置動畫更新。

- (IBAction)move:(id)sender { 

[UIView animateWithDuration:0.4 delay:0.0 
       options:UIViewAnimationOptionBeginFromCurrentState 
       animations:^{ 
        self.myButton.center = CGPointMake(200, 300); 
       }completion:^(BOOL finished){ 

        if(finished){ 
         [email protected]"moved"; 
        } 

       }]; 
} 
+0

同樣的問題在這裏,任何人都有這個解決方案? – 2014-09-22 06:37:13

回答

16

此問題可能是由在UIView上設置了自動佈局引起的。嚴格來說,如果你使用自動佈局,那麼,那麼你不應該動畫物體的絕對位置 - 你應該動畫他們的約束,而不是

更改標籤文本,一旦你的動畫正在進行觸發佈局刷新,而iOS洗牌周圍的一切都符合原來的視圖約束。 (我懷疑這是iOS7的行爲改變)。

快速修復:取消選中視圖上的自動佈局,這應該按預期工作。

+0

這是工作。即使我不使用設置任何約束 – 2016-07-25 02:38:08

1

試試這個。也將所需的動畫放入完成塊中。

- (IBAction)move:(id)sender { 

    [UIView animateWithDuration:0.4 delay:0.0 
        options:UIViewAnimationOptionBeginFromCurrentState 
        animations:^{ 


self.myButton.center = CGPointMake(200, 300); 
       }completion:^(BOOL finished){ 



     if(finished){ 
         [email protected]"moved"; 
self.myButton.center = CGPointMake(200, 300); 
        } 

       }]; 
} 
+0

如果我這樣做,我會看到視圖閃爍。 :/不滿意。 – fatuhoku 2015-09-22 11:57:02