2013-08-01 68 views
2

我有10張圖片,我需要隨着平滑動畫每4秒隨機更改一次背景顏色。如何平滑地改變背景顏色

我的代碼是

self.bgTimer = [NSTimer scheduledTimerWithTimeInterval: 4.0 target: self 
         selector: @selector(updateViewBackground) 
         userInfo: nil repeats: YES]; 

self.bgTimerNSTimer財產。

和用於改變背景的方法是

- (void)updateViewBackground { 
int randomNumber = arc4random_uniform(10); 
self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:[NSString stringWithFormat:@"random_bg_%i",randomNumber]]]; 
} 

其改變根據所選擇的隨機圖像的背景,但它突然改變的背景。

我需要平穩地改變顏色(如淡入淡出或交叉溶解時需要2秒的改變)。

如何實現這一點。

也有一個更好的方法來做到這一點,而不是這NSTimer方法。

+0

對不起,但我已經試過這個,它不工作。 –

+0

查看我更新的答案。 – Buntylm

+0

它適用於重複:僅限於第一次NO,因爲定時器只運行一次,但重複:是它不工作。 –

回答

0

如果你正在尋找像動畫一樣改變顏色,試試這個。

- (void)updateViewBackground { 
    int randomNumber = arc4random_uniform(10); 
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
    dispatch_async(queue, ^{ 
     dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 
      [UIView transitionWithView:self.view duration:7.25 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ 
       self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:[NSString stringWithFormat:@"random_bg_%i",randomNumber]]]; 
      } completion:nil]; 
     }); 
    }); 
} 

如果你看動畫更慢,那麼增加持續時間。

+0

它的工作正常,但阻止了我的主線程,它有一個UITable它,它沒有得到滾動正確,有時甚至沒有滾動,我們可以用其他方式做... –

+0

是的,等我會更新我的答案。 – Buntylm

+0

主線程仍然被阻塞,更新後的代碼不起作用... –

1

嘗試與此一..

- (void)updateViewBackground { 
    CATransition *animation = [CATransition animation]; 
    [animation setDelegate:self]; 
    [animation setType:kCATransitionFromBottom]; 
    [animation setDuration:1.0]; 
    [animation setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]]; 
    [[self.view layer] addAnimation:animation forKey:@"transitionViewAnimation"]; 
    int randomNumber = arc4random_uniform(10); 
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:[NSString stringWithFormat:@"random_bg_%i",randomNumber]]]; 
} 

OR

- (void)updateViewBackground { 
     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationDuration:0.3]; 
     int randomNumber = arc4random_uniform(10); 
     self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:[NSString stringWithFormat:@"random_bg_%i",randomNumber]]]; 
     [UIView commitAnimations]; 
} 
0

您正在使用正確的功能,但只就不得不提到的圖像名。

- (void)updateViewBackground { 
    int randomNumber = arc4random_uniform(10); 
    self.view.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:[NSString stringWithFormat:@"random_bg_%i.png",randomNumber]]]; 
} 
0

內停止改變你突然需要動畫的變化-[UIView animateWithDuration: animations:]是你要尋找的圖像。這裏是一個小的代碼示例:

self.view.backgroundColor = [UIColor redColor]; 

[UIView animateWithDuration:1.0 animations ^{ 
    self.view.backgroundColor = [UIColor greenColor]; 
}]; 

顯然,你需要編輯這個以適應你的代碼等希望它幫助!

編輯:這裏的a link到類參考incase你想讀它!