Ive been struggling with this for a couple of days now. 

I have a custom CALayer with a custom property, percentage. It's @dynamic and 
set up to cause a redraw. 

+(BOOL)needsDisplayForKey:(NSString *)key
{
        return [ @"percentage" isEqualToString:key ];
}

I return CABasicAnimations for percentage and for position with the code at the 
bottom in actionForKey:. The position one just makes the position change really 
slowly. 

For position all I have to do is make a CABasicAnimation, set the duration and 
nothing else and return it, the position animates smoothly from where it was to 
where it's going. 

If I do the same for 'percentage', just return a CABasicAnimation with the 
duration set, it doesn't animate, it just goes instantly to the final value. 
For this one I have to explicitly set the 'fromValue' to the current value in 
the presentation layer, leaving it nil just doesn't do the job. It finds the 
'toValue' itself, but I have to tell it where it's coming from. 

Why do they work differently? This prevents me from using addAnimation:forKey: 
for 'percentage' because each one is different, depending what the current 
value of percentage is. 


-(id<CAAction>)actionForKey:(NSString *)event
{
                
        if( [ event isEqualToString:@"position" ] )
        {
                CABasicAnimation *animation = [ CABasicAnimation 
animationWithKeyPath:@"position" ];
                animation.duration = 7.f;
                return animation;
        }
        
        if( [ event isEqualToString:@"percentage" ] )
        {
                CABasicAnimation *animation = [ CABasicAnimation 
animationWithKeyPath:@"percentage" ];
                animation.duration = 2.f;
                animation.fromValue = [ self.presentationLayer 
valueForKey:event ];
                return animation;
        }
        
        return [ super actionForKey:event ];;
}
_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to