IOS - плавный переход к изменению цвета/анимация - программирование
Подтвердить что ты не робот

IOS - плавный переход к изменению цвета/анимация

Я хочу иметь плавный переход по цвету, проходящий по всему спектру (т.е. красный, синий, зеленый, желтый, оранжевый и т.д.)

Также хотите иметь гладкие переходы цветов в определенном спектре (т.е. все красные).

Существуют ли какие-либо простые алгоритмы/рекурсивные функции/формулы, которые могут помочь упростить этот процесс?

4b9b3361

Ответ 1

Один очень простой способ добиться этого - использовать блок анимации UIView.

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

Это будет интерполировать между любым view предыдущим цветом фона и красным в течение 1 секунды.

Swift

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

Ответ 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 для iOS: как использовать анимацию UIView

Ответ 3

Один из возможных способов сделать это - применить цветную анимацию фона на уровне представления.

Теперь, чтобы пройти весь спектр, вам нужно работать с комбинациями из трех цветов.

Лучший способ добиться этого - использовать "Hue".

[[UIColor alloc] initWithHue: 135/360.0f насыщенность: 1 яркость: 1 альфа: 1]

Теперь вам нужно повторить все значения Hue, и вы получите плавный переход, проходящий по всему спектру.

Пример кода:

  • создать локальную переменную

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];
}];
}

Вы можете остановить анимацию в соответствии с вашим использованием.