【问题标题】:Gradually adding rectangle animation in iOS在 iOS 中逐渐添加矩形动画
【发布时间】:2017-12-27 07:55:22
【问题描述】:

我在 Xcode 中有一个单视图应用程序,并在 ViewController.swift 中执行以下操作。我的目标是让屏幕在 5 秒内逐渐填满棕色矩形。我错过了什么还是方法完全错误?

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    let expandAnimation: CABasicAnimation = CABasicAnimation(keyPath: "path")
    expandAnimation.fromValue = UIBezierPath(rect: CGRect(x: 0.0, y: 0.0, width: 0.0, height: 0.0))
    expandAnimation.toValue = UIBezierPath(rect: CGRect(x: 0.0, y: 0.0, width: self.view.bounds.size.width, height: self.view.bounds.size.height))
    expandAnimation.duration = 5.0
    expandAnimation.fillMode = kCAFillModeForwards
    expandAnimation.isRemovedOnCompletion = false
    let rectLayer: CAShapeLayer = CAShapeLayer()
    rectLayer.fillColor = UIColor.brown.cgColor
    rectLayer.path = UIBezierPath(rect: CGRect(x: 0.0, y: 0.0, width: 0.0, height: 0.0)).cgPath
    rectLayer.add(expandAnimation, forKey: nil)
    self.view.layer.addSublayer(rectLayer)
}

我不希望颜色逐渐出现。我想要一种玻璃填充的效果。想象一下这个

除了花哨的波浪效果。

【问题讨论】:

  • 您想让您的视图逐渐将其颜色从一种颜色更改为另一种颜色?
  • 从空到完全充满棕色
  • 我需要这种波浪效果的注水,请指导。

标签: ios uiviewcontroller swift4 uibezierpath cabasicanimation


【解决方案1】:

更好地理解您的问题后,您想模拟水杯的归档(没有波浪的动画),您可以通过以下方式实现:

    let myLayer: CALayer = .init()
    myLayer.backgroundColor = UIColor.red.cgColor
    self.view.layer.addSublayer(myLayer)

    func animateFilling(to view:UIView)
    {
        var mFrame = CGRect(x: 0, y: view.frame.size.height, width: view.frame.size.width, height: 0)
        myLayer.frame = mFrame
        let fillingAnim = CABasicAnimation(keyPath: "bounds")
        fillingAnim.fillMode = kCAFillModeForwards
        fillingAnim.fromValue = mFrame
        fillingAnim.duration = 2
        fillingAnim.isRemovedOnCompletion = false
        mFrame.size.height = 1000
        fillingAnim.toValue = mFrame
        myLayer.add(fillingAnim, forKey: nil)
    }

【讨论】:

  • 对不起,如果我的解释不够详细。但我不希望颜色逐渐出现。我想要一种与玻璃填充效果相反的效果。想象一下this 的反面,除了花哨的波浪效果。这就是为什么我使用UIBezierPath
  • 感谢您的快速回复!
  • 酷,用这个 gif 更新你的问题,会让人们更清楚。
  • @AbSin 没问题,我已根据您的新解释编辑了答案。
  • @Sh_Khan 我认为波浪动画比将其放置到位更棘手。会试一试,我还在学习,如果我不能这样做会发布一个单独的问题。
【解决方案2】:

我认为如果你不想要顶波,这样做很容易

  override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    let vv = UIView(frame: CGRect(x: 0, y: self.view.bounds.size.height, width: self.view.bounds.size.width, height: 0))

    vv.backgroundColor = UIColor.brown

    self.view.addSubview(vv)

    UIView.animate(withDuration: 5.0) {


         vv.frame = CGRect(x: 0, y: self.view.bounds.size.height / 3.0, width: self.view.bounds.size.width, height: self.view.bounds.size.height * 2 / 3.0)

    }

}

【讨论】:

  • 感谢它也完成了这项工作!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多