【问题标题】:Animating CALayer of UIView to round corners将 UIView 的 CALayer 动画到圆角
【发布时间】:2011-05-04 16:47:29
【问题描述】:

我正在尝试为我的视图角的圆角设置动画。 cornerRadius 属性被列为动画,但我似乎无法让它工作。实际上我也无法让任何其他属性进行动画处理,但角落是我感兴趣的。这是我的代码,非常简单:

[CATransaction begin];
[CATransaction setValue: [NSNumber numberWithFloat: 2.0f] forKey:kCATransactionAnimationDuration];

self.myView.layer.cornerRadius = 50.0f;

[CATransaction commit];

我在这里错过了什么?角落变得圆润,但它是瞬时的,而不是 2 秒。

【问题讨论】:

    标签: ios animation core-animation rounded-corners catransition


    【解决方案1】:
    CABasicAnimation *anim1 = [CABasicAnimation animationWithKeyPath:@"cornerRadius"];
    anim1.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear];
    anim1.fromValue = [NSNumber numberWithFloat:0.0f];
    anim1.toValue = [NSNumber numberWithFloat:50.0f];
    anim1.duration = 2.0;
    [self.myView.layer addAnimation:anim1 forKey:@"cornerRadius"];
    

    【讨论】:

    • 这段代码在哪里?在 viewDidLoad?或 viewWillAppear?还是 viewDidAppear?
    • 这是一个按钮按下的动作。
    • 见上文以获得新的改进答案
    【解决方案2】:

    Swift 4.2/5

    let anim1 = CABasicAnimation(keyPath: "cornerRadius")
    anim1.timingFunction = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear)
    anim1.fromValue = 0
    anim1.toValue = 50
    anim1.duration = 2.0
    layer.add(anim1, forKey: "cornerRadius")
    

    Swift 3/4.0

    let anim1 = CABasicAnimation(keyPath: "cornerRadius")
    anim1.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
    anim1.fromValue = 0
    anim1.toValue = 50
    anim1.duration = 2.0
    myView.layer.add(anim1, forKey: "cornerRadius")
    

    更新:

    正如 Mark 所注意到的,使用 #keyPath 来描述要设置动画的属性更简洁:

    let anim1 = CABasicAnimation(keyPath: #keyPath(CALayer.cornerRadius))
    

    【讨论】:

    • #keyPath(CALayer.cornerRadius) 会好一些。
    【解决方案3】:

    看来你想多了。我能够在不使用 CoreAnimation 的情况下度过难关。这是我所做的:

    UIView.animate(withDuration: animationDuration) {
        self.myView.layer.cornerRadius = 10.0
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多