UIView.animate和CGRect不起作用 - Swift 4

时间:2018-05-15 17:05:49

标签: swift animation cgrect

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

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。 我该如何防止这种情况发生?

2 个答案:

答案 0 :(得分:1)

如果你想要一个“飞扬”的动画,你应该使用动态动画师并为场景添加重力并强制使用元素。然后UIKit将计算动画。

Apple doc是:UIDynamicAnimator

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

看看Ray Wenderlich教程:click

答案 1 :(得分:1)

如果您要实现这种用法的游戏,也许最好先看看SpriteKit而不是UIKit。看看SKSpriteNode以及如何添加SKPhysicsBody。