如何动画一个UIBezierPath如何动画一个UIBezierPath(How to Animat

2019-05-17 00:03发布

我想,因此从一个形状摇身一变到另一个一个矩形的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];
}

Answer 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的持续活跃。



文章来源: How to Animate a UIBezierPath