2011-01-23 18 views
5

CGPathAddEllipseInRect'i izleyen bir CAKeyframeAnimation kullanarak bir UIView'i bir daire boyunca canlandırıyorum. Bununla birlikte, görünüm her zaman orijinal olarak yerleştirildiği kareye bakılmaksızın aynı yerde başlıyor gibi görünür. Yoldaki görünümün başlangıç ​​konumunu ayarlamak için bir yol var mı?CGAffineTransform için Başlangıç ​​Noktasını Ayarlayın

Teşekkürler!

CAKeyframeAnimation *myAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
myAnimation.fillMode = kCAFillModeForwards; 
myAnimation.repeatCount = 5; 
myAnimation.calculationMode = kCAAnimationPaced; 
myAnimation.duration = 10.0; 

CGMutablePathRef animationPath = CGPathCreateMutable(); 

CGPathAddEllipseInRect(animationPath, NULL, rect); 

myAnimation.path = animationPath; 
CGPathRelease(animationPath); 

[view.layer addAnimation:myAnimation forKey:@"changeViewLocation"]; 

cevap

1

CGPathAddEllipseInRect için bir başlangıç ​​noktası belirlemek mümkün değil. CGPathAddEllipseInRect, Sen kullanmalıdır: CGPathAddArc

kullanmak yerine (En azından ben başarılı değildi)! Örneğin:

CAKeyframeAnimation *myAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"]; 
myAnimation.fillMode = kCAFillModeForwards; 
myAnimation.repeatCount = 5; 
myAnimation.calculationMode = kCAAnimationPaced; 
myAnimation.duration = 10.0; 

CGMutablePathRef animationPath = CGPathCreateMutable(); 

NSInteger startVal = M_PI/2; 

//seventh value (end point) must be always 2*M_PI bigger for a full circle rotation 
CCGPathAddArc(animationPath, NULL, 100, 100, 100, startVal, startVal + 2*M_PI, NO); 

myAnimation.path = animationPath; 
CGPathRelease(animationPath); 

[view.layer addAnimation:myAnimation forKey:@"changeViewLocation"]; 

altından başlayarak tam daire dönecektir - saat yönünde. Dönüş başlangıç ​​konumunu değiştirmek için startVal değerini değiştirin. (tam dönüş 2 * M_PI'dir).

0

Önceki cevabın doğru olup çalışır, ancak orada M_PI tamsayı yuvarlanır

CGFloat startVal = M_PI/2; 

yerine Aksi

NSInteger startVal = M_PI/2; 

olmalıdır ve doğru açıyı elde etmek mümkün olmayacaktır . P.S. önceki cevabı yorumlamak için düşük bir itibara sahip, üzgünüm.