Подтвердить что ты не робот

Как оживить UIBezierPath

Я хотел бы оживить UIBezierPath прямоугольника треугольника, а не анимировать представление по пути, но анимировать сам путь, чтобы он переходил из одной формы в другую. путь добавляется в CALayer

CAShapeLayer *maskLayer = [CAShapeLayer layer];
maskLayer.fillColor = [[UIColor whiteColor] CGColor];    
maskLayer.path = [self getRectPath];

-(CGPathRef)getTrianglePath
{
    UIBezierPath* triangle = [UIBezierPath bezierPath];
    [triangle moveToPoint:CGPointZero];
    [triangle addLineToPoint:CGPointMake(width(self.view),0)];
    [triangle addLineToPoint:CGPointMake(0, height(self.view))];
    [triangle closePath];
    return [triangle CGPath];
}

-(CGPathRef)getRectPath
{
    UIBezierPath*rect = [UIBezierPath bezierPathWithRect:self.view.frame];
    return [rect CGPath];
}
4b9b3361

Ответ 1

Я не эксперт по CoreAnimation, но вы можете определить CABasicAnimation следующим образом

CABasicAnimation *morph = [CABasicAnimation animationWithKeyPath:@"path"];
morph.duration = 5;
morph.toValue = (id) [self getTrianglePath];
[maskLayer addAnimation:morph forKey:nil];

В первой строке указано, что вы хотите определить анимацию, которая изменяет свойство path слоя. Во второй строке указано, что анимация занимает пять секунд, а третья строка дает окончательное состояние анимации. Наконец, мы добавляем анимацию к слою. Ключ является уникальным идентификатором для анимации, то есть, если вы добавите две анимации с одним и тем же ключом, будет рассмотрен только последний. Этот ключ также может использоваться для переопределения так называемых неявных анимаций. Есть несколько свойств CALayer, которые анимируются по умолчанию. Точнее, если вы измените одно из этих свойств, изменение будет анимировано с продолжительностью 0.25.