Использование CMRotationMatrix для поворота CALayer - PullRequest
1 голос
/ 30 сентября 2019

Я пытаюсь повернуть прямоугольный CALayer в трехмерном пространстве с применением CATransform3D из CMRotationMatrix, который я получаю из CMDeviceMotion.attitude.

        let deviceRotationMatrix = currentAttitude.rotationMatrix
        var transform = CATransform3DIdentity
        transform.m34 = -1.0 / 500
        var transformDif =
        CATransform3DIdentity

        transformDif.m11 = CGFloat(deviceRotationMatrix.m11)
        transformDif.m12 = CGFloat(deviceRotationMatrix.m12)
        transformDif.m13 = CGFloat(deviceRotationMatrix.m13)

        transformDif.m21 = CGFloat(deviceRotationMatrix.m21)
        transformDif.m22 = CGFloat(deviceRotationMatrix.m22)
        transformDif.m23 = CGFloat(deviceRotationMatrix.m23)

        transformDif.m31 = CGFloat(deviceRotationMatrix.m31)
        transformDif.m32 = CGFloat(deviceRotationMatrix.m32)
        transformDif.m33 = CGFloat(deviceRotationMatrix.m33)

        transform = CATransform3DConcat(transform, transformDif)
        layer.transform = transform

Но вместо того, чтобы наклоняться, как устройство, слой вращается очень странно. Он режет слой даже при старте с начальной CMRotationMatrix:

m11: 0.9999837279319763 m12: 7.226566231111065e-05 m13: -0.00570113817229867
m21: -4.828692181035876e-05 m22: 0.9999911785125732 m23: 0.0042059835977852345
m31: 0.005701391492038965 m32: -0.004205639939755201 m33: 0.9999749064445496
...