У меня есть пользовательская ячейка UITableView, у которой есть кнопка и ярлык. Я запускаю метод, когда кто-то нажимает на кнопку, а затем окрашивает эту строку. Все работает нормально.CABasicAnimation в CAGradientLayer не работает - что я делаю неправильно?
То, что я хочу на самом деле сделать это
- пользователь нажимает кнопку отводы, строка окрашивается в градиенте (он работает сейчас)
- Градиент угасает
Мой код ниже (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];
С помощью этого кода, когда я касаюсь кнопки на строке фон получает градиент, но он никогда не исчезает, нет анимации - ничего. Что я делаю не так? Я попробовал несколько перестановок и увидел несколько примеров, но никто из них не помог мне заставить эту работу работать.
Спасибо!
Мэтт, Да! Это была проблема, и ваш ответ разрешил мой вопрос. Я ударил еще одну загвоздку - теперь затухание работает красиво, но только один раз. Это строка в виде таблицы. Когда я нажимаю кнопку в ячейке, я вижу этот градиент/исчезает в первый раз. Все последующие краны запускают метод, в котором я создаю слой и т. Д., Но ничего не происходит визуально. Я подозреваю, что это что-то связано с слоем, но недостаточно знать. Я попробовал replaceSubLayer, но не мог заставить его работать, никаких подсказок? Я все равно буду пахать вперед, но спасибо за кучу ответа. – John
Если вы удерживаете указатель на слой градиента в своей ячейке в качестве ivar, вы можете просто удалить его, когда анимация завершится, а затем повторно создать/повторно добавить его в следующий раз, когда вы хотите ее оживить. –
hmm..это имеет смысл. Сделаю - спасибо. – John