使用不断变化的约束为imageView设置动画(进度条)Swift

时间:2017-04-27 01:42:20

标签: ios swift constraints uiviewanimation

所以,我正在创建一种进度条,大多数只是一个从0到100%的动画。我有两张图片,一张是底部是红色的,另一张是黑色的。我试图从顶部图像中删除,以创建它从0到100%加载的想法,慢慢显示下面的图像。我已经完成了所有工作,我的问题是我没有看到它们之间。我看到0%和100%,我可以调试它并查看控制器并查看我的视图控制器(自我)更新并慢慢取走顶部图像,所以我知道它正在工作,但我没有看到它通过每个动画。我已经编辑了一个移动的东西大约一吨但没有看到变化。感谢大家提前帮助!

override func viewDidAppear(_ animated: Bool) {
    if intCounter <= 100{
        UIView.animate(withDuration: 0.05, animations: catScanE.layoutIfNeeded)
        repeat {
            dblImageH = dblImageH - 3.80
            self.catScanE.frame = CGRect(x: 27  , y: 197, width: 320, height: dblImageH)
            intCounter = intCounter + 1
        } while  (intCounter <= 100)
    } else {
        performSegue(withIdentifier: "lastSegue", sender: nil)
    }
}

我已经让动画基本上起作用,它向下滚动屏幕但显示了一种动画。我希望它能慢慢限制约束,但现在这不是问题。由于动画&#34;工作&#34;,我无法在动画后得到它,这就是我所拥有的。添加if intCounter部分使它跳过动画和segue,没有它,屏幕就会执行动画并坐在那里......

override func viewDidAppear(_ animated: Bool) {
            UIView.animate(withDuration: 5.0, animations: {
                self.dblImageH = self.dblImageH - 3.80
                self.catScanE.frame = CGRect(x: 27  , y: 197, width: 320, height: self.dblImageH)
                self.intCounter = self.intCounter + 1

                if self.intCounter > 100{
                    self.performSegue(withIdentifier: "lastSegue", sender: nil)}
            })

}

我在Ravron和更多StackOverflow搜索的帮助下找到了它。我将内容模式设置为属性中的顶部,并使用此代码使其像进度条一样(这是一个黑色图像,下面有一个红色图像,看起来像是从0到100)。我遇到了一个问题,图像基本上向上或向下移动,这是通过更改y坐标以匹配大小的变化来修复的,因此它基本上保持在相同的位置。我只需要弄清楚如何使计数器在动画时从0变为100。谢谢!希望这可以帮助其他人制作自定义进度条。

    override func viewDidAppear(_ animated: Bool) {

            UIView.animate(withDuration: 5.0, animations: {
                self.catScanE.frame = CGRect(x: 27  , y: 200, width: 320, height: 0)
            }, completion: {finished in self.performSegue(withIdentifier: "lastSegue", sender: nil)})
}

1 个答案:

答案 0 :(得分:0)

您的animate块只运行一次,并且视图框架的最终设置都是重要的。视图实际上是从0%到100%的动画,但它发生在50毫秒,或大约三帧。

只需将帧设置为动画块中所需的最终位置,并将持续时间增加到合理的范围,例如100 * 0.05s = 5s

稍微扩展:animate方法非正式地说,“运行下面的块,它会更改各种视图的一个或多个特征。然后,隐式地将这些特征从其当前值动画化为设置时的值。阻止了。“所以它只被调用一次,在其中你应该设置特征到他们想要的最终值。

考虑阅读the animations section of the View Programming Guide for iOS,它全面概述了平台上的动画基础知识,还介绍了UIView基于块的动画,这是您在此处尝试使用的类型。