Animasyonlar durduğunda tümü özel işlemler gerçekleştirmem gereken bir dizi örtüşen CATransition / CAAnimation dizisine sahip olduğumda bir sorun yaşadım, ancak animationDidStop için yalnızca bir delege işleyici istedim.
Ancak, bir sorun yaşadım, animationDidStop temsilcisindeki her bir CATransition / CAAnimation'ı benzersiz bir şekilde tanımlamanın bir yolu yok gibi görünüyordu.
CAAnimation'ın bir parçası olarak ortaya çıkan anahtar / değer sistemi aracılığıyla bu sorunu çözdüm.
Animasyonunuzu başlattığınızda, animationDidStop tetiklendiğinde kullanılacak tanımlayıcılarınızı ve değerlerinizi ayarlamak için CATransition / CAAnimation'da setValue yöntemini 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];
}
AnimationDidStop temsilcinizde:
- (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önü, durumu temsilci sınıfınızda saklamak yerine anahtar değeri eşleştirme sisteminde tutmanıza izin vermesidir. Daha az kod, daha iyi.
Anahtar Değer Çifti Kodlaması ile ilgili Apple Referansını kontrol ettiğinizden emin olun .
AnimationDidStop delegesinde CAAnimation / CATransition tanımlama için daha iyi teknikler var mı?
Teşekkürler --Batgar