首页 > 解决方案 > 在 NIB 中面临 CGAffineTransform 的问题

问题描述

我有 2 个视图 ( viewLeft, viewRight)。我通过计算相同的锚点以天使 0(初始设置)旋转这些视图,以便看起来视图正在跨铰链旋转。

我已经完成了下面的代码,如果我在故事板(viewcontroller)中获取视图,它工作正常,如果我在笔尖中复制并粘贴相同的视图和代码,它就不起作用。在 Nib 中,0 天使视图在它们之间留下一些空间。这是奇怪的行为,我检查了所有代码出口和约束,一切都很好,但无法弄清楚为什么它不起作用。

我希望它在 NIB 中工作。

任何帮助都将是可观的。

Github虚拟项目参考这里

输出:

从故事板

在此处输入图像描述

来自 XIB

在此处输入图像描述

代码工作

设置锚点

extension UIView {
    func setAnchorPoint(_ point: CGPoint) {
        var newPoint = CGPoint(x: bounds.size.width * point.x, y: bounds.size.height * point.y)
        var oldPoint = CGPoint(x: bounds.size.width * layer.anchorPoint.x, y: bounds.size.height * layer.anchorPoint.y);

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

        var position = layer.position

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

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

        layer.position = position
        layer.anchorPoint = point
    }
}

旋转功能

func rotateView(_ addAngel : CGFloat) {

    let rotateToAngel = angel + addAngel

    guard rotateToAngel <= 0.6 && rotateToAngel >= -0.6  else {
        return
    }
    angel = rotateToAngel
    let anchorPointLeft = CGPoint(x: (viewLeft.frame.width - viewLeft.frame.height/2)/viewLeft.frame.width,
                                  y: ( viewLeft.frame.height/2)/viewLeft.frame.height)

    viewLeft.setAnchorPoint(anchorPointLeft)

    let anchorPointRight = CGPoint(x: (viewRight.frame.height/2/viewRight.frame.width),
                                   y: ( viewRight.frame.height/2)/viewRight.frame.height)

    viewRight.setAnchorPoint(anchorPointRight)


    self.viewLeft.transform = CGAffineTransform.init(rotationAngle: rotateToAngel)
    self.viewRight.transform = CGAffineTransform.init(rotationAngle: -rotateToAngel)

}

标签: iosxibswift4.2

解决方案


推荐阅读