SORU
10 AĞUSTOS 2009, PAZARTESİ


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
7 EYLÜL 2009, PAZARTESİ


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"]) ...

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • joshsnice

    joshsnice

    28 Kasım 2006
  • modica89

    modica89

    24 HAZİRAN 2007
  • UCBerkeley

    UCBerkeley

    3 Mayıs 2006