Re: CABasicAnimation does not animate bounds.origin of a layer
Re: CABasicAnimation does not animate bounds.origin of a layer
- Subject: Re: CABasicAnimation does not animate bounds.origin of a layer
- From: David Duncan via Cocoa-dev <email@hidden>
- Date: Mon, 16 Sep 2019 09:44:48 -0700
> On Sep 14, 2019, at 6:25 AM, Gabriel Zachmann via Cocoa-dev
> <email@hidden> wrote:
>
> Maybe, I haven't understood how the animation of the bounds property works,
> or the bounds property of a CALayer itself ,
> or I am making a stupid mistake.
>
> Here is my code:
>
> CALayer * imgLayer = [CALayer layer];
> imgLayer.contents = (__bridge id) imageRef;
> imgLayer.delegate = nil;
> imgLayer.opacity = 1.0;
> imgLayer.anchorPoint = CGPointMake( 0.0, 0.0 );
> imgLayer.zPosition = -1.0;
>
> CABasicAnimation * anim = [CABasicAnimation animationWithKeyPath:
> @"bounds"];
> anim.timingFunction = [CAMediaTimingFunction functionWithName:
> kCAMediaTimingFunctionLinear];
> anim.duration = 5; // sec
> anim.autoreverses = YES;
> anim.repeatCount = 1000000; // =
> forever
>
> NSRect from_rect = NSMakeRect( 100.0, 100.0, 200.0, 200.0 );
> anim.fromValue = [NSValue valueWithRect: from_rect ];
> NSRect to_rect = NSMakeRect( 200.0, 200.0, 300.0, 300.0 );
> anim.toValue = [NSValue valueWithRect: to_rect ];
>
> [imgLayer addAnimation: anim forKey: @"myBoundsAnim"];
>
>
> What I am seeing is that the image gets scaled (from 200 to 300
> width/height) which is fine,
> but it always sits in the lower left corner of the screen (I am working under
> macOS).
>
> I want the lower left corner of the image to be animated , too.
> (Eventually, the animation will be a bit more complex, but for now I am just
> trying to understand this.)
>
> What am I missing? or going wrong?
>
> I guess I could achieve the effect by animating the position property of the
> layer,
> but I'd rather prefer to understand what is going on.
> I have also re-read the "Core Animation Basics" , but it doesn't explain the
> meaning of bounds.origin.
> In the drawings, it's always (0,0).
The bounds origin is the origin of the coordinate system for sublayers of that
layer, and thus changing the bounds origin moves sublayers around. However,
contents are affected by the contentsGravity of a layer, and the default
gravity is “Resize” and so the image will be scaled to fill the layer.
If you want the image to move, you should animate the position of the layer,
not the bounds.origin.
>
> Thanks a lot in advance for any insights.
>
> Best regards, Gabriel
>
>
>
>
>
>
> _______________________________________________
>
> Cocoa-dev mailing list (email@hidden)
>
> 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:
>
> This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden