2012-06-03 14 views
22

Ich möchte einen UIBezierPath eines Rect zu einem Dreieck animieren, nicht um eine Ansicht auf einem Pfad zu animieren, sondern den Pfad selbst animieren, so dass er von einer Form zur nächsten morpht. der Pfad zu einem CALayer hinzugefügtSo animieren Sie einen UIBezierPfad

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

Antwort

28

Ich bin kein Experte für Coreanimation, aber Sie können einen CABasicAnimation definieren als

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

Die erste Zeile besagt, folgt, dass Sie eine Animation definieren möchten, dass die Änderungen path Eigenschaft der Ebene. Die zweite Zeile gibt an, dass die Animation fünf Sekunden dauert und die dritte Zeile den Endstatus der Animation angibt. Schließlich fügen wir die Animation zur Ebene hinzu. Der Schlüssel ist ein eindeutiger Bezeichner für die Animation. Wenn Sie also zwei Animationen mit demselben Schlüssel hinzufügen, wird nur der letzte berücksichtigt. Dieser Schlüssel kann auch dazu verwendet werden, sogenannte implizite Animationen zu überschreiben. Es gibt ein paar Eigenschaften von CALayer, die standardmäßig animiert sind. Genauer gesagt, wenn Sie eine dieser Eigenschaften ändern, wird die Änderung mit einer Dauer von 0,25 animiert.

+0

danke, einfach. Ich benutzte CAKeyframeAnimation. –

Verwandte Themen