Como animar um UIBezierPath

Eu gostaria de animar um UIBezierPath de um rect para um triângulo, não para animar uma visão em um caminho, mas animar o caminho em si, para que ele se transforma de uma forma para outra. o caminho é adicionado a um 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]; } 

Eu não sou um especialista em CoreAnimation, mas você pode definir um CABasicAnimation seguinte forma

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

A primeira linha informa que você deseja definir uma animação que altere a propriedade de path da camada. A segunda linha indica que a animação leva cinco segundos e a terceira linha indica o estado final da animação. Finalmente, adicionamos a animação à camada. A chave é um identificador exclusivo para a animação, isto é, se você adicionar duas animações com a mesma chave, apenas a última será considerada. Essa chave também pode ser usada para replace as chamadas animações implícitas. Existem algumas propriedades de um CALayer que são animadas por padrão. Mais precisamente, se você alterar uma dessas propriedades, a alteração será animada com uma duração de 0,25.