2015-04-24 3 views
2

Как я могу повернуть изображение в случайном порядке от 0 до 360?Повернуть изображение в случайном порядке

Этот код давайте мне повернуть его на 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) 
    } 

Но это не распространяется работа ..

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

(Вам нужно определить пи Если я правильно помню, вам необходимо импортировать Дарвина, а затем доступна константа 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 не изменит положение.)

Кроме того, он будет вращаться от текущего положения, а не от исходного положения. Таким образом, вызывая функцию дважды подряд и предполагая, что DiceRoll 3 одновременно, представление вернется в исходное положение.

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) 
} 
Смежные вопросы