ПОДХОД 1
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 раза и изменить следующие строки в соответствующем порядке.
для 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-х транзакций со смещением можно начинать вторую транзакцию по завершении первой и третью по завершении второй. Но часть времени, необходимая для запуска новой анимации, когда она завершена, становится заметной.
ПОДХОД 3
Подкласс CAShapeLayer
При выполнении SubClass метод drawInContext вызывается только один раз, и если какое-то дополнительное свойство добавляется и изменяется, метод drawInContext вызывается повторно, и таким образом цвет слоя может быть изменен по истечении определенного периода времени. Но переопределение метода drawInContext не служит цели.
Какие-либо предложения ? Я не хочу реализовывать NSTimer отдельно.