UIView動畫失效問題
UIView動畫失效
我們一般在做簡單動畫時,可以用UIView 提供的[UIView animateWithDuration: animations:]等方法,來設定一些簡單的動畫。但是有時候動畫效果會失效。
某個專案中在tableViewCell上使用此方法設定動畫時,第一次載入cell時會出現動畫失效問題,就會出現所有動畫效果duration=0的效果;也就是沒有動畫效果直接顯示設定的值。
WTF ! ! 程式碼都是常規操作啊,為什麼會失效呢?於是各種嘗試,把UIView關於動畫的屬性和方法試了很多。終於發現問題,原來系統不知什麼時候把UIView的areAnimationsEnabled值給設定成了NO,這個值在view建立處理預設是YES;
推測原因:多個nsthread同時處理並在thread中改介面是會造成動畫丟失的
解決方法:
解決方法一:
呼叫UIView的setAnimationsEnabled方法。
[UIView setAnimationsEnabled:YES];
解決方法二:
將動畫程式碼顯式的放在主執行緒中
dispatch_async(dispatch_get_main_queue(), ^{ NSLog(@"執行緒 %@",[NSThread currentThread]); [UIView animateWithDuration:4 animations:^{ NSLog(@"UIView.areAnimationsEnabled==%d",UIView.areAnimationsEnabled); self.blockView.tyu_width = blockW; } ]; });