swift - 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 那样上升。我怎样才能防止这种情况发生?
解决方案
如果你想要一个“flappy”动画,你应该使用动态动画师并为场景添加重力并为元素添加力量。然后 UIKit 会计算动画。
苹果文档是:UIDynamicAnimator。
在这种情况下,每次按下按钮/屏幕时都会向视图添加一些向上的力,它会自行上升并在失去速度后开始下降。
看Ray Wenderlich教程:点击
推荐阅读
- html - 使用 Tailwind 将内容置于屏幕外
- flutter - Flutter:未处理的异常:空值检查运算符用于空值
- python-3.x - wxpython 在关闭 wx.EVT_CLOSE 之前执行操作
- python - 导入 matplotlib 时出错,除非使用 anaconda
- go - 连接问题,net::ERR_CONNECTION_REFUSED
- asp.net-web-api - asp net core kestrel cpu使用率高
- google-bigquery - 将 Airflow 运行 id、dag id、执行日期等变量导出到 Bigquery 表
- reactjs - 如何使用 deleteMany() 从 mongoDB 中删除所有文档?
- html - 不好(背景图片在 github 中不起作用)
- r - 如何让 R-markdown webex 包正常工作?