Ho una sottoclasse CALayer
con float animAngle
come proprietà contrassegnata come @dynamic
. Ho implementato i metodi actionForKey
, initWithLayer
, needsDisplayForKey
e drawInContext
per la sottoclasse. La definizione di actionForKey
è la seguenteSottoclasse CALayer che non si anima alle modifiche delle proprietà
- (id<CAAction>)actionForKey:(NString *)event {
if([event isEqualToString:@"animAngle"]) {
return [self animationForKey:event];
}
return [super actionForKey:event];
}
E
- (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;
}
In someother classe:
myCASublayer.animAngle = 0.5f;
In qualche modo il CABasicAnimation
viene restituito non è in grado di utilizzare correttamente il livello "animAngle
" proprietà. Cosa potrei fare di sbagliato qui?
Uno si chiama 'animAngle' l'altro è' wiggleAngle' –
@RobvanderVeer: Mi dispiace che è stato un errore di battitura. Il suo animAngle. – rawatm
@ basstrekerk87, meglio copiare/incollare la volta successiva, salva errori! Sai che in realtà non devi indentare il codice manualmente? Utilizzare il pulsante o iniziare con 3 backquote (') –