如何在其左上角坐标中旋转UIVIew?

时间:2018-01-02 11:46:03

标签: ios swift uiview

现有的CGAffineTransform可以很好地完成这项工作,但它只能在其中心点旋转。我想在其左上角坐标中旋转UIView,

轮换代码:

// here rectangle is UIView
rectangle.transform = CGAffineTransform(rotationAngle: 90.degreesToRadians)

扩展:

// use to convert degree to radian
extension BinaryInteger {
    var degreesToRadians: CGFloat { return CGFloat(Int(self)) * .pi / 180 }
}

我无法在建议的问题中找到答案。

2 个答案:

答案 0 :(得分:1)

只需在转换前更改图层的anchorPoint。例如:

rectangle.layer.anchorPoint = CGPoint.zero
rectangle.transform = CGAffineTransform(rotationAngle: 90.degreesToRadians)

答案 1 :(得分:0)

谢谢Trix和the4kman的想法。我解决了我的问题。 Trix的回答并没有完全帮助我。但他显示了一些暗示。使用这些提示我解决了我的答案。

第1步

为UIView创建此扩展以设置anchorPoint

extension UIView{
    func setAnchorPoint(anchorPoint: CGPoint) {

        var newPoint = CGPoint(x: self.bounds.size.width * anchorPoint.x, y: self.bounds.size.height * anchorPoint.y)
        var oldPoint = CGPoint(x: self.bounds.size.width * self.layer.anchorPoint.x, y: self.bounds.size.height * self.layer.anchorPoint.y)

        newPoint = newPoint.applying(self.transform)
        oldPoint = oldPoint.applying(self.transform)

        var position : CGPoint = self.layer.position

        position.x -= oldPoint.x
        position.x += newPoint.x;

        position.y -= oldPoint.y;
        position.y += newPoint.y;

        self.layer.position = position;
        self.layer.anchorPoint = anchorPoint;
    }
}

用法

rectangle.setAnchorPoint(anchorPoint: CGPoint.zero)
rectangle.transform = CGAffineTransform(rotationAngle: 90.degreesToRadians)

这完美地运作。