Merkezinde ama birkaç kez etrafında bir UIView döndürmek

oy
16

Bazı döndürmek çalışıyorum UIViewbasit kodu (pseudocode) gibi bir şey gider, böylece onun merkezi etrafında:

[UIView beginAnimations:@crazyRotate context:nil];
[UIView setAnimationDuration:1.0];
someview.transform = CGAffineTransformMakeRotation(angle);
[UIView commitAnimations]

Ben açısını ayarlarsanız şimdi M_PI / 2 şey güzel döner söylemek. Ben M_PI * 2 olarak ayarlarsanız, iyi o hiçbir şey yok. Ben ölçek etkisi geliyor döndürmek (bir gazetenin düşünmek o 5 kez döndürmek istediğiniz, matris hiçbir şey yapmaz bir şey (bir anlamda kalmak 360 devir aracı) çevirir anlıyoruz, ama olabilir - ben değilim tanımlayan en büyük,) birisi anlar umuyoruz. Yani, 180 ° (M_PI) ve iç içe bir ekleme ayarı açısını ekleyerek çalıştı animatationBlock. ama ben aynı özellik ayarlıyorum beri (sanırım someview.transition) tekrar) şekilde onu yok sayar. Ben açısı M_PI makrosu ile 2'ye animasyon yineleme sayısını ayarlama çalıştı ama sadece düz pozisyona geri dönüyor ve tekrar döndürme başlatarak, 180 döndürmek gibi görünüyor.

Yani, fikirlerin biraz kafam, herhangi bir yardım takdir! -T

Oluştur 06/02/2009 saat 00:49
kaynak kullanıcı
Diğer dillerde...                            


4 cevaplar

oy
36

Eğer UIView katman mülkiyet aşağıdaki animasyon kullanabilirsiniz. Bunu test ettik.

UIView *viewToSpin = ...;    
CABasicAnimation* spinAnimation = [CABasicAnimation
                                  animationWithKeyPath:@"transform.rotation"];
spinAnimation.toValue = [NSNumber numberWithFloat:5*2*M_PI];
[viewToSpin.layer addAnimation:spinAnimation forKey:@"spinAnimation"];
Cevap 06/02/2009 saat 01:26
kaynak kullanıcı

oy
6

Brad Larson belirtildiği gibi, bir ile yapabilirsiniz CAKeyframeAnimation. Örneğin,

CAKeyframeAnimation *rotationAnimation;
rotationAnimation = 
   [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.z"];

rotationAnimation.values = [NSArray arrayWithObjects:
                            [NSNumber numberWithFloat:0.0 * M_PI], 
                            [NSNumber numberWithFloat:0.75 * M_PI], 
                            [NSNumber numberWithFloat:1.5 * M_PI], 
                            [NSNumber numberWithFloat:2.0 * M_PI], nil]; 
rotationAnimation.calculationMode = kCAAnimationPaced;
rotationAnimation.removedOnCompletion = NO;
rotationAnimation.fillMode = kCAFillModeForwards;
rotationAnimation.timingFunction = 
   [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
rotationAnimation.duration = 10.0;

CALayer *layer = [viewToSpin layer];
[layer addAnimation:rotationAnimation forKey:@"rotationAnimation"];

Eğer toplam animasyon süresini kontrol edebilir rotationAnimation.durationözelliği ile ve (arasındaki aşamaların ve hesaplama) hızlanma ve yavaşlama rotationAnimation.timingFunctionözelliği.

Cevap 29/02/2012 saat 00:37
kaynak kullanıcı

oy
1
CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:0.0f];
animation.toValue = [NSNumber numberWithFloat: 2*M_PI];
animation.duration = 8.0f;
animation.repeatCount = INFINITY;
[self.myView.layer addAnimation:animation forKey:@"SpinAnimation"];
Cevap 22/06/2015 saat 15:35
kaynak kullanıcı

oy
1

Sürekli eğirme efekti alma biraz zordur, ama bunu yapmak için bir yol tarif burada . Evet, Core Animation birim daire içinde en yakın bitiş pozisyonuna dönüşümleri optimize etmek gibi görünüyor. Bir animasyon diğerine devirde hafif kekeme fark yapmak her ne kadar yöntem ben, tam rotasyonlar yapmak için bir araya orada zincirlerini birkaç yarım dönme animasyonlar açıklar.

Belki bu yarım dönüş değerleri ile inşa edilmiş bir CAKeyframeAnimation en doğru yol olacaktır. Sonra da hızlanma ve yavaşlama kontrol edebilecek.

Cevap 06/02/2009 saat 14:50
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more