2012-04-05 19 views
13

Bir UIView animasyon bloğu içinde, mevcut animasyonun süresini elde etmenin bir yolu var mı?Geçerli animasyon bloğunun animasyon süresini öğrenin

[UIView animateWithDuration:1.0 animations:^{ 
    // float duration = ? 
}]; 
+0

Ne demek istediğimi anladığımdan emin değilim, animasyon süresi 1.0 değil mi? –

+2

evet, ancak süreyi bilmesi gereken bloğun içinde bir bileşen kullanıyorum ve süreyi – adamsiton

+0

iyi bir soru olarak iletmek istemiyorum Üzgünüz, yardım edemedim. –

cevap

0

Blokları kullandığınızdan, neden sadece bir değişkene sahip değiliz?

CGFloat duration = 1.0; 
[UIView animateWithDuration:duration animations:^{ 
    CGFloat theDuration = duration; 
}]; 
+0

Kabul. Zaten süreyi geçiyoruz o zaman neden bunun için başka bir yol bulmalıyız. – Mrug

2

[CATransaction animationDuration] sen Kolayca yeterli akım animasyon alabilirsiniz

+0

Ne yazık ki işe yaramazsa, UIView animasyon bloğu görünüşe göre doğrudan CATransaction ile çalışmıyor. –

2

aradığınızı olduğunu. Örneğin, bir CATransaction kurma:

CAAnimation *animation = [self.layer animationForKey:self.layer.animationKeys.firstObject]; 
[CATransaction begin]; 
[CATransaction setAnimationDuration:animation.duration]; 
[CATransaction setAnimationTimingFunction:animation.timingFunction]; 

// CALayer animation here 

[CATransaction commit]; 
2

TL; DR: -animationForKey değil CALayer -actionForKey :, kullanın:

@Dimitri Bouniol 'ın cevabı benim için işe yaramadı An An çağrıldığında Bir animasyon bloğu içinde etkilenen setter. Anlayışımın sebebi, UIView'in animasyon sisteminin gerçek animasyonu başlatmadan önce durumu belirlemesidir (ve gerçek animasyonu başlatmadan önce ayarlayıcıları çağırır). Benim için işe yarayan şey, katmandaki benzer-actionForKey: yöntemini çağırıyordu. Döndürülen eylem, uygun süreye ayarlandı ve cevabında olduğu gibi kullanılabilir.

CAAnimation *animation = (CAAnimation*) 
[self.layer [email protected]"position"]; // or property of interest 

[CATransaction begin]; 
[CATransaction setAnimationDuration:animation.duration]; 
[CATransaction setAnimationTimingFunction:animation.timingFunction]; 

// CALayer animation here 

[CATransaction commit];