Saya memiliki masalah di mana saya memiliki serangkaian urutan CATransition / CAAnimation yang tumpang tindih, yang semuanya saya perlukan untuk melakukan operasi kustom saat animasi berhenti, tetapi saya hanya menginginkan satu penangan delegasi untuk animationDidStop.
Namun, saya punya masalah, sepertinya tidak ada cara untuk mengidentifikasi secara unik setiap CATransition / CAAnimation dalam delegasi animationDidStop.
Saya memecahkan masalah ini melalui sistem kunci / nilai yang diekspos sebagai bagian dari CAAnimation.
Saat Anda memulai animasi, gunakan metode setValue pada CATransition / CAAnimation untuk menyetel pengenal dan nilai Anda yang akan digunakan saat animationDidStop diaktifkan:
-(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];
}
Dalam delegasi animationDidStop Anda:
- (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.
}
Aspek lain dari ini adalah memungkinkan Anda untuk mempertahankan status dalam sistem penyandingan nilai kunci alih-alih harus menyimpannya di kelas delegasi Anda. Semakin sedikit kode, semakin baik.
Pastikan untuk memeriksa Referensi Apple tentang Pengodean Pasangan Nilai Kunci .
Apakah ada teknik yang lebih baik untuk identifikasi CAAnimation / CATransition di delegasi animationDidStop?
Terima kasih, --Batgar
CAAnimation
itu delegate
kuat, jadi Anda mungkin perlu mengaturnya nil
untuk menghindari siklus penahanan!