iOS:通过CATransform3DRotate旋转时跳转uiview

时间:2018-07-17 15:22:51

标签: ios swift uiview catransform3d

我尝试使用自己的锚点以90度角旋转uiview(高度和宽度为100)。更改锚点后,我将转换视图,以便两个更改彼此抵消。

当我使用(Double.pi)旋转视图时,它会按预期进行动画处理,但是当我更改为(Double.pi / 2)时,视图会跳起来。

    testView.layer.anchorPoint = CGPoint(x: 0.5, y: 1)
    testView.layer.transform = CATransform3DMakeTranslation(0, -50, 0)

    UIView.animate(withDuration: 2.3, delay: 0, options: .curveLinear, animations: { () -> Void in
        var allTransofrom = self.testView.layer.transform
        var c3d = CATransform3DIdentity
        c3d.m34 = 2.5 / (2000)
        let rot = CATransform3DRotate(c3d, CGFloat(Double.pi/2), 1, 0, 0)
        allTransofrom = CATransform3DConcat(allTransofrom, rot)
        self.testView.layer.transform = allTransofrom
    }, completion: {(finished) in
    } )

完整代码here

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案,但是 我仍然不知道跳跃从何而来。

我没有通过CGAffineTransform.translatedBy或CATransform3DMakeTranslation进行翻译,而是改编了我的NSLayoutConstraint。

testViewAnchors[0].constant = testViewAnchors[0].constant + CGFloat(50)

在我的情况下,不需要为“翻译”制作动画,但是由于可以对NSLayoutConstraints进行动画处理,所以这不是问题。