Ios 每1秒移动一次UIimage

Ios 每1秒移动一次UIimage,ios,swift,uiimage,projectile,Ios,Swift,Uiimage,Projectile,我有一个UIimage,我想根据某些方程式(物理投射物时间方程式)给出的X和Y移动它,我希望它每1秒移动一次,这样用户就会觉得它实际上在移动,而不仅仅是在最后一个位置消失和重新出现,加上我认为给出的位置是错误的。我将感谢任何一个或两个问题的帮助 func moveCannonBall(toX:Int , toY:Int ){ var frm: CGRect = ballimageview.frame frm.origin.x = frm.origin.x + CGFloat(to

我有一个UIimage,我想根据某些方程式(物理投射物时间方程式)给出的X和Y移动它,我希望它每1秒移动一次,这样用户就会觉得它实际上在移动,而不仅仅是在最后一个位置消失和重新出现,加上我认为给出的位置是错误的。我将感谢任何一个或两个问题的帮助

func moveCannonBall(toX:Int , toY:Int ){
    var frm: CGRect = ballimageview.frame
    frm.origin.x = frm.origin.x + CGFloat(toX)
    frm.origin.y = frm.origin.y - CGFloat(toY)
    ballimageview.frame = frm
}
到目前为止,我试过:

func moveCannonBall(toX:Int , toY:Int ){
    var frm: CGRect = ballimageview.frame
    frm.origin.x = frm.origin.x + CGFloat(toX)
    frm.origin.y = frm.origin.y - CGFloat(toY)
    ballimageview.frame = frm
}
移动功能:

func moveCannonBall(toX:Int , toY:Int ){
    var frm: CGRect = ballimageview.frame
    frm.origin.x = frm.origin.x + CGFloat(toX)
    frm.origin.y = frm.origin.y - CGFloat(toY)
    ballimageview.frame = frm
}
点击按钮时,它应该接受用户的输入(重力、角度和初始速度)

func moveCannonBall(toX:Int , toY:Int ){
    var frm: CGRect = ballimageview.frame
    frm.origin.x = frm.origin.x + CGFloat(toX)
    frm.origin.y = frm.origin.y - CGFloat(toY)
    ballimageview.frame = frm
}
它应该每1秒停止一次,但只有计算每1秒暂停一次,UIimage才会消失并重新出现

func moveCannonBall(toX:Int , toY:Int ){
    var frm: CGRect = ballimageview.frame
    frm.origin.x = frm.origin.x + CGFloat(toX)
    frm.origin.y = frm.origin.y - CGFloat(toY)
    ballimageview.frame = frm
}
    while Int(toX) < Int(xMax)  {
        sleep(1)
        t = t + 1

        toX = V0*cos(angle)*t
        toY = -0.5*gravity*t*t + V0*sin(angle)*t

        moveCannonBall(toX: Int(toX), toY: Int(toY))
    }
}
而Int(toX)

非常感谢您的帮助。

正如Losiowaty所说,UIView.animationWithDuration是一个不错的选择。看看这个答案,看看语法是怎样的:

从不(我的意思是从不)在主队列上使用任何形式的
睡眠。所以这不是一个简单的暂停?简单的答案是不,不是。您应该查看
UIView.animateWithDuration
方法,但是沿着漂亮的曲线移动球并不是那么简单。谢谢,它工作得很好!
func moveCannonBall(toX:Int , toY:Int ){
    var frm: CGRect = ballimageview.frame
    frm.origin.x = frm.origin.x + CGFloat(toX)
    frm.origin.y = frm.origin.y - CGFloat(toY)
    ballimageview.frame = frm
}