2012-06-03 6 views
22

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

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]; 
} 

ответ

28

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

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

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

+0

спасибо, просто. Я использовал CAKeyframeAnimation. –

Смежные вопросы