2013-11-05 50 views
18

我想有在整個頻譜變(即紅,藍,綠,黃,橙等)iOS版 - 平滑的色彩過渡更改/動畫

也希望能夠平穩過渡色在特定光譜中具有平滑的顏色過渡(即所有紅色)。

有沒有簡單的算法/遞歸函數/公式可以幫助簡化這個過程?

回答

41

一個非常簡單的方法來完成這將是使用UIView動畫塊。

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

這將之間進行內插的任何view的先前的背景顏色爲,紅色在1秒的過程中。

斯威夫特

UIView.animate(withDuration: 1.0) { 
    view.backgroundColor = .red 
} 
+0

感謝您的回答。這很有幫助,但實際上我需要一種算法,因爲我必須將顏色代碼單獨發送到設備。不能只使用UIView的方法... – JimmyJammed

+0

這太棒了。 – VSG24

3

使用以下用於iOS的色彩過渡的代碼,它給你的各種configureable選項:
1)延遲啓動動畫
2)回調的動畫完成之前
3 )動畫選項

[UIView animateWithDuration:1.0 delay:0.2 options:0 animations:^{ 
     view.backgroundColor = [UIColor greenColor]; 
    } completion:^(BOOL finished) 
    { 
     NSLog(@"Color transformation Completed"); 
    }]; 

對於詳細d請訪問:
UIView Tutorial for iOS: How To Use UIView Animation

0

這樣做的一種可能方式是在視圖的圖層上應用背景色動畫。

現在要通過整個光譜,你必須處理三種顏色的組合。

達到此目的的最佳方法是使用「色相」。

[的UIColor頁頭] initWithHue:135/360.0f飽和度:1 亮度:1阿爾法:1]

現在你必須遍歷所有的色調值,你會得到平穩過渡這貫穿了所有的光譜。

樣品的編號:

  1. 使一個局部變量

INT _currentColorHue = 0;

  1. 遞歸調用改變背景顏色。

- (無效)animateMyView {

[UIView animateWithDuration:0.01 animations:^{ 
    self.view.layer.backgroundColor = [[UIColor alloc] initWithHue:_currentColorHue/360.0f saturation:1 brightness:1 alpha:1].CGColor; 
} completion:^(BOOL finished) 
{ 
    _currentColorHue++; 
    if (_currentColorHue > 360) 
    { 
     _currentColorHue = 0; 
    } 
    [self animateMyView]; 
}]; 
} 

您可以根據自己的使用停止動畫。