2017-04-11 38 views
-1

我有一个UIimage,我想根据某些方程(物理抛射时间方程)给出的X和Y来移动,并且我希望它每移动一次,以便它看起来像用户就好像它实际上在不断移动并重新出现在最后一个位置,再加上发出的位置是错误的,我认为。我将不胜感激任何一个或两个问题的帮助。使UIimage每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 
} 

在按钮单击它应该把用户的输入(重力,角度和初始速度)

@IBAction func getAlpha(sender:AnyObject){ 
    gravity = Float(g[pickerView.selectedRow(inComponent: 0)]) 
    xMax = ((V0*V0)*sin(2.0*angle))/gravity 

它应该停止每1秒,但只有计算暂停每1秒和UIimage只是消失并重新出现只是

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

任何帮助表示赞赏。

+1

**永不**(我的意思是永不)在主队列上使用任何形式的'睡眠'。 – rmaddy

+0

所以它不是一个简单的停顿? – Ace

+1

简单的答案是不,它不是。您应该查看'UIView.animateWithDuration'方法,但是沿着漂亮的曲线移动球并不那么简单。 – Losiowaty

回答