Я пытаюсь повернуть прямоугольный 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