我有一系列图片在一个视图控制器中。
我通过转换它们的各个图层来“浮动”它们:
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 floating views),供任何想要查看当前效果的人使用。(当这个项目完成时,我将在此留下完整的(可工作的)项目链接,以供后人参考。)