【问题标题】:Rotate imageview a random degree随机旋转图像视图
【发布时间】:2015-07-03 09:26:40
【问题描述】:

如何将 ImageView 从 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)
    }

但这不起作用..

【问题讨论】:

  • 你的diceRoll的当前值是多少?
  • @Christian It´s... random(?)
  • 是的,我知道。但它是否足够大以至于它的价值足以旋转它?例如,如果该值介于 0 和 1 之间,则旋转不可见。
  • 刚才的值在1到10之间进行测试..
  • 尝试一些更高的值,比如 50 到 80 之间。1 到 10 是不可见的。我认为您的代码应该可以工作。

标签: xcode swift xcode6


【解决方案1】:

试试这个:

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。如果我没记错的话,您必须导入 Darwin,然后 M_PI 常量可用。)

【讨论】:

  • 在文件顶部添加import Darwin 行,然后M_PI 将是一个定义的常量,包含pi 的值。
  • 您还可以添加明确的let pi = 3.1415926536。这对于屏幕显示来说已经足够准确了。
【解决方案2】:

您正在旋转 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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-27
    • 2018-07-27
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多