2013-08-17 21 views
5

Mam podklasę CALayer z floatem animAngle jako właściwość oznaczoną jako @dynamic. Zaimplementowałem metody dla podklasy. definicja actionForKey jest następującyPodklasa CALayer nie animująca się do zmian właściwości

- (id<CAAction>)actionForKey:(NString *)event { 
    if([event isEqualToString:@"animAngle"]) { 
     return [self animationForKey:event]; 
    } 
    return [super actionForKey:event]; 
} 

And

- (CABasicAnimation *)animationForKey:(NSString *)key 
{ 
    NSString *animValue = [[self presentationLayer] valueForKey:key];// Logs as 0 
    CABasicAnimation *anim; 

    if([key isEqualToString:@"animAngle"]) { 
     anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; 
     anim.repeatCount = HUGE_VAL; 
     anim.autoreverses = YES; 
     //anim.fromValue = [[self presentationLayer] valueForKey:key]; // setting animation value from layer property as in here does not work. 
     anim.fromValue = [NSNumber numberWithFloat:0.5f];   // This works 
    } 
    anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]; 
    anim.duration = 0.11; 
    return anim; 
} 

W someother Klasa:

myCASublayer.animAngle = 0.5f; 

Jakoś CABasicAnimation zwracane nie jest w stanie właściwie korzystać z warstwy "animAngle" własność. Co ja bym prawdopodobnie zrobił źle tutaj?

+0

Jeden nazywa 'animAngle' drugi jest' wiggleAngle' –

+0

@RobvanderVeer: Niestety to była literówka. Jego animAngle. – rawatm

+0

@ basstrekerk87, lepiej kopiuj/wklej następnym razem, zapisuje błędy! Wiesz, że nie musisz ręcznie wciskać kodu? Użyj przycisku lub zacznij od 3 cudzysłowów (') –

Odpowiedz

1

CocoaHeads Session: Rob Napier on Animating Custom Layer Properties to dobra prezentacja na temat niestandardowych animacji.

CALayers cierpię rysować;)

+0

dzięki, to działa. ale jeśli animacja jest nieskończona w liczbie powtórzeń, daje tylko animacje raz. Czy drawInContext nie jest wywoływany dla powtarzających się animacji? – rawatm

+0

@ basstrekker87 Nie jestem pewien, czy akcja dla klucza może obsługiwać powtarzanie. AFAIK to mniej więcej niejawna animacja ze starej wartości do nowej wartości. –

+0

tak, może tak być w przypadku, gdy nienawidzą CALayers draw :-) – rawatm

1

Jeśli animAngle jest @property - musisz określić accessors dla tej właściwości.
Po oznaczeniu właściwości jako @dynamic oznacza to, że dostarczycie implementację tych metod dynamicznie w środowisku wykonawczym. Tak więc, jeśli nie zapewnisz dostępu do właściwości, nie będziesz mieć do niej dostępu.

+0

próbowałem tworzyć akcesoria dla animAngle, ale nadal nie działa. @dynamic jest wymagany dla podklas CALayer, który zapewnia implementacje dla samej właściwości, ale zmiany w dowolnym czasie nadal nie są aktualizowane – rawatm

+0

To nie jest prawdą w przypadku CALayers. Są ... "specjalne";) –

+0

@ DavidRönnqvist: Co nieprawdziwe. odpowiedź od Lexandr lub komentarz, który dodałem. – rawatm