使用核心动画更改cornerRadius

7

我正在尝试以以下方式更改按钮(OpenNoteVisible.layer)的圆角半径:

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"];

但是这段代码在[animation.layer setCornerRadius:140.0];这一行报错,我不明白为什么。我已经导入了Quartz core框架。

你可以为按钮设置圆角。因此请使用按钮对象。 - SRI
2个回答

23

你正在为动画对象的图层属性设置圆角半径;但是,这个动画对象没有图层属性。

你需要在你要动画的东西的图层上设置圆角半径,此处为OpenNoteVisible。你还需要确保动画对象的toValue与你在图层上设置的值相匹配,否则会出现奇怪的动画效果。

你的代码应该改为:

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"];

0

Swift 4 的解决方案如下:

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
    })
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接