2012-06-03 13 views
22

Bir UIBezierPath'ı bir üçgene recteki bir animasyona animasyon uygulamak, bir yoldaki bir görünümü canlandırmak değil, yolun kendisini canlandırarak, bir şekilden diğerine dönüşmesini sağlamak istiyorum. yol Ben CoreAnimation uzmanı değilim amaUIBezierPath'in Nasıl Oluşturulacağı

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

ilk satır aşağıdaki gibi bir CABasicAnimation tanımlayabilirsiniz bir 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]; 
} 

cevap

28

eklenmediğinde değiştiren bir animasyon tanımlamak istediğiniz belirtiyor edilir Katmanın path özelliği. İkinci satır, animasyonun beş saniye sürdüğünü ve üçüncü çizginin animasyonun son durumunu verdiğini belirtir. Son olarak, animasyonu katmana ekliyoruz. Anahtar, animasyon için benzersiz bir tanımlayıcıdır, yani aynı anahtarla iki animasyon eklerseniz, yalnızca sonuncusu dikkate alınır. Bu anahtar, örtülü animasyonları geçersiz kılmak için de kullanılabilir. Varsayılan olarak animasyonlu bir çift CALayer özellikleri vardır. Daha kesin olarak, bu özelliklerden birini değiştirirseniz, değişiklik 0,25 ile animasyonlu olacaktır.

+0

Teşekkürler, basit. CAKeyframeAnimation kullanıyordum. –

İlgili konular