Changing cornerRadius using Core Animation

I am trying to change the corner radius of a button (OpenNoteVisible.layer) in the following way:

CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"cornerRadius"];
animation.timingFunction = [CAMediaTimingFunction     functionWithName:kCAMediaTimingFunctionLinear];
animation.fromValue = [NSNumber numberWithFloat:10.0f];
animation.toValue = [NSNumber numberWithFloat:0.0f];
animation.duration = 1.0;
[animation.layer setCornerRadius:140.0];
[OpenNoteVisible.layer addAnimation:animation forKey:@"cornerRadius"];

But this code gives an error at the line [animation.layer setCornerRadius:140.0];
I can’t understand why. I have imported Quartz core framework.

  • Set contents of CALayer to animated GIF?
  • UIBezierPath Triangle with rounded edges
  • How do I create an alpha only bitmap context
  • Drawing Circular Gradient
  • How to apply partial fade in-out in IOS?
  • iPhone UIView Animation Best Practice
  • Solutions Collect From Internet About “Changing cornerRadius using Core Animation”

    You’re setting the corner radius on the layer property of the animation object; this animation object doesn’t have a layer property.

    You need to set the corner radius on the layer of the thing you’re animating, in this case OpenNoteVisible. You also need to ensure the toValue of the animation object matches the value you’re setting on the layer, otherwise you’ll get odd animations.

    Your code should now be:

    CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"cornerRadius"];
    animation.timingFunction = [CAMediaTimingFunction     functionWithName:kCAMediaTimingFunctionLinear];
    animation.fromValue = [NSNumber numberWithFloat:10.0f];
    animation.toValue = [NSNumber numberWithFloat:140.0f];
    animation.duration = 1.0;
    [OpenNoteVisible.layer setCornerRadius:140.0];
    [OpenNoteVisible.layer addAnimation:animation forKey:@"cornerRadius"];