如何在CATransform3D之后重置UIView的位置?

时间:2015-11-13 20:46:22

标签: ios uiview gyroscope catransform3d

我有一个UIView,他的视角我想在用户旋转设备时稍微改变一下。例如,当用户向右倾斜时,我希望视图的左侧“上升”。而正确的尺寸进入'但只到某一点。 到目前为止,这是我的代码:

var dynamicTransform = CATransform3DIdentity
        dynamicTransform.m34 = 1/(-500)

        // Device Tilt
        if motionManager.gyroAvailable {
            motionManager.gyroUpdateInterval = 0.1/30
            motionManager.startGyroUpdates()
            motionManager.startGyroUpdatesToQueue(NSOperationQueue.mainQueue(), withHandler: { (gyroData, NSError) -> Void in
                // Perspective Transform
                dynamicTransform = CATransform3DRotate(dynamicTransform, CGFloat(Double(gyroData!.rotationRate.y) * M_PI / 1080.0), 0, 0.1, 0)
                dynamicTransform = CATransform3DRotate(dynamicTransform, -CGFloat(Double(gyroData!.rotationRate.x) * M_PI / 1080.0), 0.1, 0, 0)
                self.blueView.layer.transform = dynamicTransform
            })

除了一些警告之外,一切都很有效:

1)当我回到设备的原始方向时,就像启动设备时一样,视图失真(即,仍然是应用了它的视角)。我的逻辑可能有问题,但我不知道是什么......

2)有时视图顺时针/逆时针旋转并且不会保持静止。

任何帮助将不胜感激, 谢谢!

1 个答案:

答案 0 :(得分:0)

您是否尝试将layoutIfNeeded发送到父视图以在更改方向后强制重新布局?