CABasicAnimation в CAGradientLayer не работает - что я делаю неправильно? - PullRequest
5 голосов
/ 17 июля 2010

У меня есть пользовательская ячейка 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];

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

Спасибо!

1 Ответ

6 голосов
/ 18 июля 2010

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

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

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

С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...