2012-07-20 18 views
6

Son zamanlarda CATransform3D kullanmaya başladım ve çok güzel görünüyor. Rotasyonda sadece 1 sorunum var. Ben sağa 360˚ derece benim görünümü döndürmek çalışıyorum ama sadece CATransform3DRotate için 360 geçmesi koyarsanız çalışmıyor İşte CATransform3DRotate 360 ​​derece döndürme

benim kod (Sadece hiç hareket etmez.):

 CALayer *layer = dock.layer; 
     CATransform3D r = CATransform3DIdentity; 
     r.m34 = 1.0/-500; 
     r = CATransform3DRotate(r, DegreesToRadians(360.0f), 100.0f, 1.0f, 100.0f); 
     layer.transform = r; 

Bu sorunun nasıl giderileceğini bilen var mı? Şimdiden teşekkürler! :)

+0

180 veya 360 derece döndürmek için çalışıyorsunuz:

Eğer eksen dışı vektör etrafında döndürmek istiyorsanız muhtemelen daha iyi çalışır bunu yapmak için başka bir yolu da, böyle bir anahtar kare animasyon kullanıyor ? Çünkü 360 derece dönmenin, dönmediğiyle aynı olduğunu düşünüyorum. – htinlinn

+0

@htinlinn Bence katını tam 360 derece döndürerek canlandırmaya çalışıyor. –

+0

@ robmayoff ah. tamam. – htinlinn

cevap

22

Bunu, tabakanın transform.rotation anahtar yolu hareketlendirerek kendi Z ekseni etrafında bir (veya daha fazla) tam dönüşleri sayesinde bir tabaka animasyon:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation"]; 
animation.duration = .25; 
animation.fromValue = [NSNumber numberWithFloat:0]; 
animation.toValue = [NSNumber numberWithFloat:2 * M_PI]; 
[layer addAnimation:animation forKey:animation.keyPath]; 

Eğer X veya Y ekseni etrafında animasyon Anahtar yolları transform.rotation.x ve transform.rotation.y kullanarak. (transform.rotation.z anahtar yolu, transform.rotation anahtar yolu ile aynı etkiye sahiptir.) Birden fazla rotasyonu, aynı anda ayrı eksenlerde uygulayabilirsiniz.

CALayer *layer = [sender layer]; 
CATransform3D transform = CATransform3DIdentity; 
transform.m34 = 1.0/-50; 
layer.transform = transform; 

CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"transform"]; 
animation.values = [NSArray arrayWithObjects: 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 0 * M_PI/2, 100, 1, 100)], 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 1 * M_PI/2, 100, 1, 100)], 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 2 * M_PI/2, 100, 1, 100)], 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 3 * M_PI/2, 100, 1, 100)], 
    [NSValue valueWithCATransform3D:CATransform3DRotate(transform, 4 * M_PI/2, 100, 1, 100)], 
    nil]; 
animation.duration = 2; 
[layer addAnimation:animation forKey:animation.keyPath];