ios - 使用不断变化的约束(进度条)Swift 对 imageView 进行动画处理

标签 ios swift constraints uiviewanimation

所以,我正在创建一种进度条,主要是一个从 0% 到 100% 的动画。我有两张图片,一张底部是红色的,一张顶部是黑色的。我试图从顶部图像中删除,以创建它正在从 0% 加载到 100% 的想法,慢慢地显示下面的图像。我已经完成了所有这些工作,我的问题是我看不到两者之间的关系。我看到 0% 和 100%,我可以调试它并查看 Controller ,并看到我的 View Controller (自身)更新并慢慢地去掉顶部图像,所以我知道它正在工作,但我没有看到它经历每个动画。我编辑了一个移动了很多东西的东西,但还没有看到变化。提前感谢大家的帮助!

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)
    }
}

我已经让动画基本上可以工作了,它向下滚动屏幕,但显示一种动画。我希望它慢慢地限制约束,但这不是现在的问题。由于动画“有效”,我无法让它在动画后继续播放,这就是我所拥有的。添加 if intCounter 部分会使其跳过动画并继续,如果没有它,屏幕将执行动画并坐在那里...

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)})
}

最佳答案

您的 animate block 仅运行一次, View 框架的最终设置才是最重要的。 View 实际上按照您的意愿从 0% 动画到 100%,但它发生在 50 毫秒内,即大约三帧。

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

稍微扩展一下:animate 方法非正式地说,“运行下面的 block ,这会更改各种 View 的一个或多个特征。然后,隐式将这些特征从当前值动画化为当前值当 block 运行时设置。”因此它只被调用一次,并且您应该在其中将特征设置为其所需的最终值。

考虑通读the animations section of the View Programming Guide for iOS其中全面概述了平台上的动画基础知识,还涵盖了 UIView 基于 block 的动画(您在此处尝试使用的类型)。

关于ios - 使用不断变化的约束(进度条)Swift 对 imageView 进行动画处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43647268/

相关文章:

ios - 检测 WKWebView 组件内的播放视频

ios - swift - 如何使用 NSURL 数组添加到收藏夹

json - 解码JSON数据时Type不符合Identifiable

ios - 对图像施加什么约束?

ios - 动画文本字段像 Messenger 和 Whatsapp 一样扩展

ios - 如何在使用 Core Graphics 绘制的图像上设置辅助功能标签?

objective-c - 将图像发送到另一个 View Controller UIImageView IOS 5.1

iOS - 无法使用 UIActivityViewController 分享到 Snapchat

ios - 无法在 SWIFT 中的方法之外保留数组数据

ios - Xcode Storyboard : How to fit different screen sizes with 10+ textfields