iOS - 平滑变色过渡/动画

时间:2013-11-05 03:45:41

标签: ios colors transitions spectrum

我希望有一个平滑的颜色过渡,遍及整个光谱(即红色,蓝色,绿色,黄色,橙色等)

还希望能够在特定光谱(即所有红色)中平滑过渡颜色。

是否有任何简单的算法/递归函数/公式可以帮助简化此过程?

3 个答案:

答案 0 :(得分:49)

实现此目的的一种非常简单的方法是使用UIView动画块。

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

这将在view之前的背景颜色之间进行插值,并在1秒的时间内进行红色插补。

<强>夫特

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

答案 1 :(得分:3)

一种可行的方法是在视图层上应用背景色动画。

现在要通过整个光谱,你必须处理三种颜色的组合。

实现这一目标的最佳方法是使用“Hue”。

  

[[UIColor alloc] initWithHue:135 / 360.0f饱和度:1   亮度:1 alpha:1]

现在你必须迭代所有的Hue值,你将获得跨越所有光谱的平滑过渡。

示例代码:

  1. 制作一个本地变量
  2.   

    int _currentColorHue = 0;

    1. 递归调用更改背景颜色。
    2.   

      - (无效)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];
      }];
      }
      

      您可以根据使用情况停止动画。

答案 2 :(得分:2)

在iOS中使用以下代码进行颜色转换,它为您提供了各种可配置选项:
1)开始动画前的延迟
2)动画完成回调
3)动画选项

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

有关不同动画的详细说明,请访问:
UIView Tutorial for iOS: How To Use UIView Animation