IOS - плавный переход к изменению цвета/анимация
Я хочу иметь плавный переход по цвету, проходящий по всему спектру (т.е. красный, синий, зеленый, желтый, оранжевый и т.д.)
Также хотите иметь гладкие переходы цветов в определенном спектре (т.е. все красные).
Существуют ли какие-либо простые алгоритмы/рекурсивные функции/формулы, которые могут помочь упростить этот процесс?
Ответы
Ответ 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;
- рекурсивный вызов цвета фона для изменения.
- (недействительными) 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];
}];
}
Вы можете остановить анимацию в соответствии с вашим использованием.