2013-03-03 14 views
28

repeatCount = HUGE_VALF numaralı telefonu kullanarak sonsuza kadar tekrarlamak istediğim bir CAKeyframeAnimation animasyonum var. Animasyonun süresi 2 saniyedir, ancak her döngüden önce 3 saniyelik bir duraklama yapmak istiyorum. I suçum düşünebilirizCAKeyframeAnama yinelemeden önce bekleme süresi

sadece 2 yolu:

  1. bütün animasyonu son 5 saniye yapın ve ekstra keyTimes ve değerleri ekleyin yüzden ben son sırasında arıyorum duraklama almak 5s animasyonun 3s. Bu bir tür hacky hissediyor.

  2. Animasyonun yalnızca bir kez yinelemesini sağlayın ve ardından animasyonu yeniden çalıştırmak için performSelector:afterDelay:2 gibi bir şey kullanın ve bu böyle devam ettirin. Bu da kirli hissediyor. Ayrıca her 5 saniyede bir addAnimation: aramam gerektiği anlamına gelir, bu da performans açısından en uygun olduğundan emin değilim.

Eksik olduğum başka bir seçenek var mı? Bu 2 yöntemden biri diğerinden daha mı iyi?

cevap

110

Apple'ın MKUserLocationView animasyonlarını boşaltarak, nasıl yaptıklarını görebildim. Bu, CAAnimationGroup'un ne için olduğunu gösterir. Swift 3'te

CAAnimationGroup *animationGroup = [CAAnimationGroup animation]; 
animationGroup.duration = 5; 
animationGroup.repeatCount = INFINITY; 

CAMediaTimingFunction *easeOut = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]; 

CABasicAnimation *pulseAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale.xy"]; 
pulseAnimation.fromValue = @0.0; 
pulseAnimation.toValue = @1.0; 
pulseAnimation.duration = 2; 
pulseAnimation.timingFunction = easeOut; 

animationGroup.animations = @[pulseAnimation]; 

[ringImageView.layer addAnimation:animationGroup forKey:@"pulse"]; 
+0

Zeki, 5 saniye animasyon grubuna bir 2 saniye animasyon enkapsüle ederek, 3 saniye gecikme ardından 2 saniyeden kısa animasyon ile bitireceğiz çözüm. Güzel ve temiz. Kendi cevabını kabul etmelisin. ;-) –

+1

Çok yardımcı. Huhu. –

+0

Wooh .. Bu efendim için teşekkürler. Şimdiye kadar mükemmel çalışıyor .. :) – 0yeoj

4

samvermette cevabı:

let animationGroup = CAAnimationGroup() 
animationGroup.duration = 5; 
animationGroup.repeatCount = .infinity 

let easeOut = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseOut) 

let pulseAnimation = CABasicAnimation(keyPath: "transform.scale.xy") 
pulseAnimation.fromValue = 0 
pulseAnimation.toValue = 1.0 
pulseAnimation.duration = 2 
pulseAnimation.timingFunction = easeOut 

animationGroup.animations = [pulseAnimation] 

ringImageView.layer.add(animationGroup, forKey: "pulse") 
İlgili konular