繁体   English   中英

CALayer动画的宽度

[英]CALayer animation for width

我有一种需要在其中添加一层的视图。 我成功添加了图层,但是现在我想为其宽度做动画,这意味着图层从“开始”标签开始填充,并在“正在等待...”标签处结束。 我尝试使用CABasicAnimation添加动画,它从开始就开始,但是不能正确填充。 请检查喜欢的视频以了解更多信息。

func startProgressAnimation()
    {
        self.ivStarted.isHighlighted = true
        let layer = CALayer()
        layer.backgroundColor = #colorLiteral(red: 0.4980392157, green: 0.8352941176, blue: 0.1921568627, alpha: 1)
        layer.masksToBounds = true

        layer.frame = CGRect.init(x: self.viewStartedAwaited.frame.origin.x, y: self.viewStartedAwaited.frame.origin.y, width: 0.0, height: self.viewStartedAwaited.frame.height)
        self.ivStarted.layer.addSublayer(layer)

        CATransaction.begin()

        let boundsAnim:CABasicAnimation = CABasicAnimation(keyPath: "bounds.size.width")
        boundsAnim.fromValue = NSNumber.init(value: 0.0)
        boundsAnim.byValue = NSNumber.init(value: Float(self.viewStartedAwaited.frame.size.width / 2.0))
        boundsAnim.toValue = NSNumber.init(value: Float(self.viewStartedAwaited.frame.size.width))
        let anim = CAAnimationGroup()
        anim.animations = [boundsAnim]
        anim.isRemovedOnCompletion = false
        anim.duration = 5
        anim.fillMode = kCAFillModeBoth

        CATransaction.setCompletionBlock{ [weak self] in
            self?.ivAwaited.isHighlighted = true
        }


        layer.add(anim, forKey: "bounds.size.width")
        CATransaction.commit()

    }

这是我用此代码实现的视频。 https://streamable.com/h6tpp

不正确

不正确

适当的图像

适当的图像

只需设置您的

layer.anchorPoint = CGPoint(x: 0, y: 0)

之后,它将根据您的要求工作。

默认的锚点(0.5,0.5)表示宽度的增长或收缩在两侧均匀发生。 (0,0)的锚点意味着该图层实际上固定在左上角,因此,无论它得到什么新宽度,更改都会在右侧发生。 也就是说,动画关键路径是“ bounds”还是“ bounds.size.width”无关紧要。 锚点是确定更改发生位置的地方

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM