Используйте CAShapeLayers и комбинацию CATransactions и CABasicAnimation.
Вы можете добавить заданный путь к shapeLayer и позволить ему выполнять рендеринг.
Объект CAShapeLayer имеет два свойства с именами strokeStart
и strokeEnd
, которые определяют, где вдоль пути должен отображаться конец строки. Значения по умолчанию: 0,0 для strokeStart
и 1,0 для strokeEnd
.
Если вы настроите свой путь так, чтобы strokeEnd
изначально начинался с 0.0, вы не увидите никакой строки.
Затем вы можете анимировать от 0,0 до 1,0 свойство strokeEnd
, и вы увидите удлинение линии.
Чтобы изменить неявное время анимации CAShapeLayer по умолчанию на 0,25 с, вы можете добавить в класс функцию, например, так:
-(void)animateStrokeEnd:(CGFloat)_strokeEnd {
[CATransaction begin];
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:keyPath];
animation.duration = 2.0f; //or however long you want it to happen
animation.fromValue = [NSNumber numberWithFloat:self.strokeEnd]; // from the current strokeEnd value
animation.toValue = [NSNumber numberWithFloat:_strokeEnd]; //to the end of the path
[CATransaction setCompletionBlock:^{ self.strokeEnd = _strokeEnd }];
[self addAnimation:animation forKey:@"animateStrokeEnd"];
[CATransaction commit];
}
Вы можете передать любое значение от 0.0f до 1.0f как значение _strokeEnd
.
setCompletionBlock:
гарантирует, что передаваемое вами значение будет явно установлено после завершения анимации.