获取UIView的当前角度/旋转/弧度?

60

如何获取 UIView 当前的角度/旋转/弧度?


我知道应该像myView.transformation这样,但是怎么做呢? - Hjalmar
@Abizern 不是很准确,他正在问如何使用CGAffineTransform来实现。这是不可能的。 - Hjalmar
7个回答

115

你可以这样做...

CGFloat radians = atan2f(yourView.transform.b, yourView.transform.a); 
CGFloat degrees = radians * (180 / M_PI);

3
我会翻译:我会给你10分的赞!我偶然看到这篇文章,不禁笑了起来,因为我完全忘记了反三角函数!就在我开始感觉那些年我上的学校教育都是浪费时,哈哈。 - Adrian Sluyters

17

Swift:

// Note the type reference as Swift is now string Strict

let radians:Double = atan2( Double(yourView.transform.b), Double(yourView.transform.a))
let degrees:CGFloat = radians * (CGFloat(180) / CGFloat(M_PI) )

8

许多其他答案引用了atan2f,但考虑到我们正在处理CGFloat,我们可以直接使用atan2并跳过不必要的中间转换:

Swift 4:

let radians = atan2(yourView.transform.b, yourView.transform.a)
let degrees = radians * 180 / .pi

6

//对于Swift 3:M_PI现已弃用,请使用Double.pi

let radians = atan2f(Float(yourView.transform.b), Float(yourView.transform.a));
let degrees = radians * Float(180 / Double.pi)

//对于Swift 4:

let radians = atan2(yourView.transform.b, yourView.transform.a)
let degrees = radians * 180 / .pi

6

对于Swift 3,您可以使用以下代码:

let radians:Float = atan2f(Float(view.transform.b), Float(view.transform.a))
let degrees:Float = radians * Float(180 / M_PI)

2
在Swift 2和Xcode 7中:
let RdnVal = CGFloat(atan2f(Float(NamVyu.transform.b), Float(NamVyu.transform.a)))
let DgrVal = RdnVal * CGFloat(180 / M_PI)

0

使用扩展:

extension UIView {
    
    var rotation: Float {
        let radians:Float = atan2f(Float(transform.b), Float(transform.a))
        return radians * Float(180 / M_PI)
    }
}

使用方法:

let view = UIView()
print(view.rotation)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接