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