代码之家  ›  专栏  ›  技术社区  ›  Chirag Shah

宽度的CALayer动画

  •  0
  • Chirag Shah  · 技术社区  · 6 年前

    我有一个视图需要添加一层。我成功地添加了图层,但现在我想做动画,因为它的宽度意味着图层从“开始”标签开始填充,并在“等待…”结束标签我试着添加动画 卡巴斯基化 它从头开始,但没有正确填充。请查看视频了解更多信息。

    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

    不妥

    Not Proper

    正确形象

    Proper image

    1 回复  |  直到 6 年前
        1
  •  1
  •   Amrit Trivedi    6 年前

    把你的

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

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

    默认锚点(0.5,0.5)表示宽度的增长或收缩在两侧均匀发生。Anchorpoint of(0,0)意味着该层基本上固定在左上角,因此无论它得到什么新宽度,变化都发生在右侧。也就是说,动画关键点路径是“边界”还是“边界”并不重要。大小宽度'。锚定点决定了变化发生的位置