CABasicAnimation в CAGradientLayer, не работающем - что я делаю неправильно?

У меня есть пользовательская ячейка UITableView, которая имеет кнопку и маркировку. Я запускаю метод, когда кто-то касается на кнопке, и затем окрасьте ту строку. Это все хорошо работает.

То, что я хочу на самом деле сделать,

  1. пользователь касается кнопки, строка окрашена в градиенте (это работает теперь),
  2. Градиент исчезает

Мой код ниже (BackView является представлением в моей пользовательской ячейке),

CAGradientLayer *layer = [CAGradientLayer layer];
layer.frame = BackView.bounds;

UIColor *cOne     = [UIColor paleYellowColor];
UIColor *cTwo     = [UIColor whiteColor];

NSArray *colors =  [NSArray arrayWithObjects:(id)cOne.CGColor,
                    cTwo.CGColor, nil];

layer.colors = colors;

NSNumber *stopOne     = [NSNumber numberWithFloat:0.00];
NSNumber *stopTwo     = [NSNumber numberWithFloat:0.8];

NSArray *locations = [NSArray arrayWithObjects:stopOne, stopTwo, nil];
layer.locations = locations;

CABasicAnimation *animateLayer = [CABasicAnimation animationWithKeyPath:@"colors"];
animateLayer.fromValue = [UIColor paleYellowColor];
animateLayer.toValue = [UIColor whiteColor];
animateLayer.duration   = 3.0;
animateLayer.removedOnCompletion = YES;
animateLayer.fillMode = kCAFillModeBoth;
animateLayer.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
[layer addAnimation:animateLayer forKey:@"animation"];

[BackView.layer insertSublayer:layer atIndex:0];

С этим кодом, когда я касаюсь кнопки строки, фон получает градиент, но это никогда не исчезает, нет никакой анимации - ничто. Что я делаю неправильно? Я попробовал несколько перестановок и видел некоторые примеры, но ни один, что помогло мне получить эту работу.

Спасибо!

5
задан John 17 July 2010 в 14:28
поделиться

1 ответ

Когда вы анимируете свойство с явной анимацией, вы указываете тип, который ожидает свойство. Свойство colors можно анимировать, однако вы даете ему UIColor для значений from и to. Ожидается NSArray. Также вам понадобятся CGColorRefs для самих цветов. Я не пробовал, но думаю, что вам нужно изменить ваши строки to и from на:

animateLayer.fromValue = [NSArray arrayWithObjects:
                         (id)[[UIColor paleYellowColor] CGColor],
                         (id)[[UIColor whiteColor] CGColor], nil];

animateLayer.toValue = [NSArray arrayWithObjects:
                         (id)[[UIColor whiteColor] CGColor],
                         (id)[[UIColor whiteColor] CGColor], nil];

Теоретически это должно исчезнуть с вашего желто-белого градиента на белый / белый, что должно дать эффект исчезновения .

С уважением.

6
ответ дан 14 December 2019 в 13:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: