我在 ViewController 中有一系列图像。
我通过转换它们的各个层来“浮动”它们:
img.layer.transform = CATransform3DMakeTranslation(0.0f, 0.0f, myZ);
这给出了使图层漂浮在屏幕上方的效果——在模拟器中,不会有可见的效果(这是正确的)。
我想要做的是产生一种效果,即向左/向右/向前/向后移动设备会使其看起来微妙地像图层浮动一样。当您将设备向左倾斜时,它应该使整个视图向右倾斜。这会让人感觉移动设备可以让您看到角落——也就是说,它会让人感觉图像确实漂浮在屏幕上方,因为它们会以不同的速率移动(基于它们的 z-index)。
我已经制作了一个测试项目(这里的项目文件),其中有一个演示这个的示例项目。
我的问题是我不是数学人,所以我正在努力寻找模拟微妙浮动效果的最佳方法。现在,我有一个 DeviceMotion 的监听器,然后它会:
self.view.layer.sublayerTransform = CATransform3DMakeRotation(20.0f * M_PI / 180.0f, 2*motion.attitude.pitch, -2*motion.attitude.roll, 0);
这与我想要的非常接近,但并不完全正确。
我认为这种效果可以在许多不同的应用程序中使用。我希望将其扩展到朋友和我正在研究面部检测的东西(因此它会根据人脸的移动移动父视图——即使他们保持手机/设备完全静止)。
我意识到我会让人们回答“只使用 OpenGL”。这不是我需要的答案——除非你发布一段代码来展示如何将它集成到这个项目中。(我不是在寻找要解决的新问题。:-)
同样,完整的项目在这里(iphone 浮动视图)供任何想看到现在效果的人使用。(当这个工作正常时,我将把完整的(工作的)项目留在这里以供后代使用。)