2015-04-24 63 views
2

如何將ImageView的旋轉角度從0度調整到360度?隨機旋轉圖像查看

此代碼let's我旋轉180度:

func rotateTimes(){ 
     UIView.animateWithDuration(5, delay: 0.0, options: UIViewAnimationOptions.CurveLinear,  animations: {() -> Void in 
      self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, 180 * 0.0174532925) 
      }, completion: nil) 
    } 

但我想隨意旋轉程度,不僅180度。

我曾嘗試:

func rotateTimes(){ 
     let diceRoll = Int(arc4random_uniform(7)) 
     UIView.animateWithDuration(5, delay: 0.0, options: UIViewAnimationOptions.CurveLinear,  animations: {() -> Void in 
      self.imageView.transform = CGAffineTransformRotate(self.imageView.transform, self.diceRoll * 0.0174532925) 
      }, completion: nil) 
    } 

但是doesn't工作..

+0

「diceRoll」的當前值是多少? – Christian

+0

@Christian It's ... random(?) –

+0

是的,我知道。但是它足夠大,它的價值足夠旋轉了嗎?例如,如果值介於0和1之間,則旋轉不可見。 – Christian

回答

0

試試這個:

let random = arc4random_uniform(1000) 
let angle = Double(2*pi*1000)/ Double(random) 
UIView.animateWithDuration(5, 
    delay: 0.0, 
    options: UIViewAnimationOptions.CurveLinear,  
    animations: 
    {() -> Void in 
    self.imageView.transform = 
     CGAffineTransformRotate(angle) 
    }, 
    completion: nil) 

(你需要定義PI如果我沒記錯您必須導入達爾文,然後可以使用M_PI常數。)

+0

我如何定義PI到正確的位置? –

+0

在文件頂部添加'import Darwin'行,然後M_PI將是一個定義的常量,它保​​存pi的值。 –

+0

你也可以添加一個顯式的'let pi = 3.1415926536'。這對於屏幕顯示足夠準確。 –

0

您正在0到6度之間旋轉。這幾乎不明顯。請嘗試使用60的倍數。

0.0174532925表示360度圓上的單個度數。記住回到代數和圈子的周長是2 * pi * r。既然我們不關心周長的長短,我們可以放棄r。圍繞圓的旋轉是2 * pi。 2 * pi/360給你上面的數字。

所以要旋轉視圖,你決定多少度旋轉,並通過0.0174532925

乘我加的低於60的因數,使旋轉更加明顯。 0不會改變位置。 1將圍繞圓圈的1/6旋轉,2將圍繞圓圈的2/6旋轉,依此類推。 (6也不會改變位置)

此外,它將從當前位置旋轉,而不是起始位置。因此,連續調用該函數兩次,並假設兩次都是3的diceRoll,視圖將​​最終回到原始位置。

func rotateTimes(){ 
    let diceRoll = CGFloat(arc4random_uniform(7)) 
    let degree = 0.0174532925 as CGFloat 
    let sixthOfCircle : CGFloat = 60 
    let rotate = diceRoll * degree * sixthOfCircle 
    UIView.animateWithDuration(5, delay: 0.0, options: UIViewAnimationOptions.CurveLinear,  animations: {() -> Void in 
     self.rotateView.transform = CGAffineTransformRotate(self.rotateView.transform, rotate) 
     }, completion: nil) 
}