Nasıl animationDidStop temsilci içinde CAAnimation tanımlamak için?
Animasyonlar durduğunda özel işlemleri gerçekleştirmek için gerekli tüm CATransition / CAAnimation dizileri, üst üste binen bir dizi vardı bir sorun vardı, ama ben sadece bir temsilci animationDidStop işleyicisi istedim.
Ancak, bir sorun vardı, benzersiz animationDidStop temsilci her CATransition / CAAnimation tanımlamak için bir yol olarak görünmüyor.
Anahtar / değer sistemi CAAnimation bir parçası olarak maruz ile bu sorunu çözdüm.
Son olarak animasyon CATransition / tanımlayıcıları ve değerleri animationDidStop harekete kullanmak üzere ayarlamak için CAAnimation üzerinde görüntülemek için bu yöntemi kullanın:
-(void)volumeControlFadeToOrange
{
CATransition* volumeControlAnimation = [CATransition animation];
[volumeControlAnimation setType:kCATransitionFade];
[volumeControlAnimation setSubtype:kCATransitionFromTop];
[volumeControlAnimation setDelegate:self];
[volumeControlLevel setBackgroundImage:[UIImage imageNamed:@"SpecialVolume1.png"] forState:UIControlStateNormal];
volumeControlLevel.enabled = true;
[volumeControlAnimation setDuration:0.7];
[volumeControlAnimation setValue:@"Special1" forKey:@"MyAnimationType"];
[[volumeControlLevel layer] addAnimation:volumeControlAnimation forKey:nil];
}
- (void)throbUp
{
doThrobUp = true;
CATransition *animation = [CATransition animation];
[animation setType:kCATransitionFade];
[animation setSubtype:kCATransitionFromTop];
[animation setDelegate:self];
[hearingAidHalo setBackgroundImage:[UIImage imageNamed:@"m13_grayglow.png"] forState:UIControlStateNormal];
[animation setDuration:2.0];
[animation setValue:@"Throb" forKey:@"MyAnimationType"];
[[hearingAidHalo layer] addAnimation:animation forKey:nil];
}
Senin animationDidStop temsilci:
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag{
NSString* value = [theAnimation valueForKey:@"MyAnimationType"];
if ([value isEqualToString:@"Throb"])
{
//... Your code here ...
return;
}
if ([value isEqualToString:@"Special1"])
{
//... Your code here ...
return;
}
//Add any future keyed animation operations when the animations are stopped.
}
Bunun diğer yönden temsilci sınıfında saklamak zorunda yerine anahtar değer eşleştirme sisteminde devlet tutmak için izin vermektedir. Daha iyi, daha az kod.
Emin Apple Reference on Key Value Pair Coding kontrol ediniz.
AnimationDidStop temsilci CAAnimation / CATransition tanımlama için daha iyi teknikleri var mı?
Teşekkürler --Batgar
CEVAP
Batgar tekniği çok karmaşık. Neden addAnimation içinde forKey parametre yararlanmak değil mi? Bu çok amaç için tasarlanmıştır. Sadece ve addAnimation arama için anahtar dizesini görüntülemek için hareket çağrısı çıkar. Örneğin:
[[hearingAidHalo layer] addAnimation:animation forKey:@"Throb"];
Sonra, animationDidStop geri, gibi bir şey yapabilirsiniz:
if (theAnimation == [[hearingAidHalo layer] animationForKey:@"Throb"]) ...
Nasıl android xml drawable dosyası içi...
Nasıl böyle büyük mükafat içinde basit...
Nasıl bir proje içinde tek bir dosya i...
Nasıl klon ya da Python içinde bir lis...
Nasıl TextView içinde HTML görüntüleme...