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.
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"];
Swift 4 solution is below
import UIKit
import PlaygroundSupport
let view = UIView(frame: CGRect(x: 0, y: 0, width: 400, height: 400))
view.backgroundColor = #colorLiteral(red: 1, green: 0.5763723254, blue: 0, alpha: 1)
PlaygroundPage.current.liveView = view
UIView.animate(withDuration: 2.5, animations: {
view.layer.cornerRadius = 40
}, completion: { _ in
UIView.animate(withDuration: 0.5, animations: {
view.layer.cornerRadius = 0
})
})