2015-06-20 78 views
0

我有一个旋转瓶子的应用程序。 当有人点击一个按钮时,瓶子会旋转。旋转瓶子应用程序

就像现在的代码一样,瓶子会旋转10次,然后停止在0到360之间的随机程度。但是我希望瓶子能够平稳地旋转并停止平滑,而不仅仅是停止不变。我想让瓶子旋转得越来越慢。

代码:

func rotateRandom(){ 
    let diceRoll = CGFloat(arc4random_uniform(360)) 
    let degree = 0.0174532925 as CGFloat 
    let rotate = diceRoll 
    UIView.animateWithDuration(0.5, delay: 0.0, options: UIViewAnimationOptions.CurveLinear,  animations: {() -> Void in 
     self.bottleImageView.transform = CGAffineTransformRotate(self.bottleImageView.transform, rotate) 
     }, completion: nil) 
    //println(diceRoll) 
} 

func rotateLeft(){ 
    UIView.animateWithDuration(3, delay: 0.0, options: UIViewAnimationOptions.CurveLinear,  animations: {() -> Void in 
     self.bottleImageView.transform = CGAffineTransformRotate(self.bottleImageView.transform, -180 * 0.0174532925) 
     self.bottleImageView.transform = CGAffineTransformRotate(self.bottleImageView.transform, -180 * 0.0174532925) 
     self.bottleImageView.transform = CGAffineTransformRotate(self.bottleImageView.transform, -180 * 0.0174532925) 
     self.bottleImageView.transform = CGAffineTransformRotate(self.bottleImageView.transform, -180 * 0.0174532925) 
     self.bottleImageView.transform = CGAffineTransformRotate(self.bottleImageView.transform, -180 * 0.0174532925) 
     self.bottleImageView.transform = CGAffineTransformRotate(self.bottleImageView.transform, -180 * 0.0174532925) 
     self.bottleImageView.transform = CGAffineTransformRotate(self.bottleImageView.transform, -180 * 0.0174532925) 
     self.bottleImageView.transform = CGAffineTransformRotate(self.bottleImageView.transform, -180 * 0.0174532925) 
     self.bottleImageView.transform = CGAffineTransformRotate(self.bottleImageView.transform, -180 * 0.0174532925) 
     self.bottleImageView.transform = CGAffineTransformRotate(self.bottleImageView.transform, -180 * 0.0174532925) 
     //self.imageView.transform = CGAffineTransformMakeRotation(360) 
     }, completion: nil) 
    rotateRandom() 
} 

这里有什么建议?我还想要一个当瓶子停下来的功能。所以我可以在瓶子停止时添加一个弹出窗口。

+0

一遍遍呼唤CGAffineTransformRotate喜欢就是不夜的方式来实现这一目标。你会想看看“缓解”,以协助最终放缓。 – JoshStrange

+0

角速度+角减速会给你在任何给定时间的角度。 – Sulthan

+0

@Sulthan Ehm,Huh? –

回答

1

我会让变换值属性,然后有一个计时器递增变换值并将变换应用于单个图像。当是时候慢下来时,让增量变得越来越小,直到停止它为止。

对于随机停止时间使用arc4ran_uniform()

+0

我该怎么做?我不明白。 –

0

这可能帮助:http://markmanx.com/?p=33

正如JoshStrange上面提到的,你会想看看缓和。使用缓动功能可以动画旋转,以便随着时间的推移平滑减速。在使用GreenSock,这是因为写东西像

Tween.to一样简单(elementToAnimate,2秒,{旋转:360,缓和:Cubic.easeOut})

我不是斯威夫特开发者,但这个家伙已经创造的缓动函数库,可以给你同样的功能:

https://github.com/craiggrummitt/SpriteKitEasingSwift