ПОДХОД 1Изменение CALayer цвета при анимации
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"strokeStart"];
[CATransaction begin];
{
[CATransaction setAnimationDuration:15];//Dynamic Duration
[CATransaction setCompletionBlock:^{
}];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
animation.autoreverses = NO;
animation.removedOnCompletion = NO;
animation.fromValue = @0;
animation.toValue = @1;
animation.timeOffset = 0;
animation.fillMode = kCAFillModeForwards;
[self.pathLayer addAnimation:animation forKey:animationKey];
}
[CATransaction commit];
Я добавил CAShapeLayer (pathLayer), на мой взгляд, и я хочу, чтобы оживить вокруг точки зрения с эффектом удара, приведенный выше код делает работу, но мой проблема заключается в изменении цвета в 3 равных пропорциях. Поэтому я предполагаю повторить вышеуказанный код 3 раза и изменить следующие строки в соответствующем порядке.
для 1-го
animation.fromValue = @0;
animation.toValue = @(1/3);
animation.timeOffset = 0;
для 2-го
animation.fromValue = @(1/3);
animation.toValue = @(2/3);
animation.timeOffset = 0;// I don't know how to exactly set this active local
time since the duration which is currently 15 is dynamic can be 30 or 10.
для 3
animation.fromValue = @(2/3);
animation.toValue = @(3);
animation.timeOffset = 0;// Active local time- Not sure how and which value to set
ПОДХОД 2
Вместо 3 транзакта ионы со смещением позволяют начать вторую транзакцию, когда 1-й закончен, а 3-й - 2-й. Но доля времени, затрачиваемого на запуск новой анимации при завершении лаг/рывок, видна.
ПОДХОД 3
SubClass CAShapeLayer
Поступая SubClass, метод drawInContext вызывается только один раз, и если добавить некоторые дополнительные свойства и он изменил метод drawInContext называется несколько раз, и таким образом цвет слоя можно изменить после определенного периода выполнения. Но переопределение метода drawInContext не служит цели.
Любые предложения? Я не хочу реализовывать NSTimer отдельно.
спасибо за ответ, это абсолютно новая перспектива для меня, чтобы увидеть, как красиво мы можем играть с анимацией слоев. Я реализовал его, и единственное неправильное в моей реализации было на третьем шаге: animation.toValue = @ (3); который должен был быть animation.toValue = @ (1); как бы я хотел, чтобы вы, пожалуйста, добавили способ, которым вы внедрили ответ, который изменит цвет всего слоя на шаге 2, а затем цвет всего слоя на шаге 3. Спасибо – yunas
@yunas отредактирован, чтобы дать более подробную информацию о «полном штрихе» меняется цвет ". – ipmcc
@ipmcc Как мы можем изменить цвета штриха от одного к другому постепенно, почти как градиент, в этом примере? Благодарю. – Unheilig