首页 > 解决方案 > UIView.animate 和 CGRect 不起作用 - Swift 4

问题描述

我正在制作这个应用程序,当你按下一个按钮时,角色会上升,然后它会下降。(我希望它表现得像这样:当它被按下时,它必须上升 200 y,然后它开始下降) 这是我的代码:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var TheCharacter: UIImageView!
    @IBOutlet weak var TheRocket: UIImageView!

    @IBAction func TheCharacterJumps(_ sender: Any) {

        let TheCharacterY = self.TheCharacter.frame.origin.y
        UIView.animate(withDuration: 0.35, animations: {
            self.TheCharacter.frame = CGRect(x: 167, y: TheCharacterY - 194, width: 40, height: 40)
        }) { (finished) in

        }
        UIView.animate(withDuration: 2, animations: {
            self.TheCharacter.frame = CGRect(x: 167, y: TheCharacterY + 435, width: 40, height: 40)
        }) { (finished) in

        }
    }
}

所以它是这样的:当按下按钮时,角色上升,然后开始下降。但是,当按钮连续按下两次或更多次时,它不会像 200y 那样上升,而只会像 50y 那样上升。我怎样才能防止这种情况发生?

标签: swiftanimationcgrect

解决方案


如果你想要一个“flappy”动画,你应该使用动态动画师并为场景添加重力并为元素添加力量。然后 UIKit 会计算动画。

苹果文档是:UIDynamicAnimator

在这种情况下,每次按下按钮/屏幕时都会向视图添加一些向上的力,它会自行上升并在失去速度后开始下降。

看Ray Wenderlich教程:点击


推荐阅读