首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iPhone上使用CoreMotion/DeviceMotion模拟图像浮动效果

在iPhone上使用CoreMotion/DeviceMotion模拟图像浮动效果
EN

Stack Overflow用户
提问于 2011-03-17 00:59:15
回答 1查看 2.7K关注 0票数 9

我在一个ViewController中有一系列的图像。

我通过转换它们的各个层来“浮动”它们:

代码语言:javascript
复制
img.layer.transform = CATransform3DMakeTranslation(0.0f, 0.0f, myZ);

这给出了使层浮动在屏幕上方的效果--在模拟器中,没有可见的效果(这是正确的)。

我想要做的是产生一种效果,将设备向左/向右/向前/向后移动,使其看起来微妙地看起来像浮动的层。当您将设备向左倾斜时,它应该使整个视图向右倾斜。这会让人感觉移动设备会让你看到周围的角落--也就是说,它会给人一种图像真的漂浮在屏幕上的感觉,因为它们会以不同的速率移动(基于他们的z指数)。

我已经做了一个测试项目(project file here),其中有一个示例项目来演示这一点。

我的问题是,我不是一个数学爱好者,所以我正在努力寻找最好的方法来模拟微妙的浮动效果。现在,我有一个用于DeviceMotion的监听器,然后它会这样做:

代码语言:javascript
复制
self.view.layer.sublayerTransform = CATransform3DMakeRotation(20.0f * M_PI / 180.0f, 2*motion.attitude.pitch, -2*motion.attitude.roll, 0);

这与我想要的非常接近,但并不完全正确。

我认为这种效果可以在许多不同的应用程序中使用。我希望将这一点扩展到我和一个朋友正在研究的人脸检测方面(这样它就可以根据一个人的脸的移动来移动父母的视角--即使他们保持手机/设备完全静止)。

我意识到我会让人们回答“只要使用OpenGL”。这不是我需要的答案--除非您发布一段代码来说明如何将其集成到此项目中。(我不是在寻找要解决的新问题。:-)

同样,完整的项目在这里(iphone floating views),供任何想要立即看到效果的人使用。(当它起作用时,我将把这里链接的完整的(正在工作的)项目留给后代。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-26 22:33:19

我想我有办法了!使用以下命令:

代码语言:javascript
复制
    [appDelegate.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]
                                                   withHandler:
     ^(CMDeviceMotion *motion, NSError *error) {

         CATransform3D transform;
         transform = CATransform3DMakeRotation(motion.attitude.pitch, 1, 0, 0);
         transform = CATransform3DRotate(transform, motion.attitude.roll, 0, 1, 0);

         self.view.layer.sublayerTransform = transform;
     }];

对我来说效果很好,如果你想翻转轴,只需在1前面加减号即可。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5328848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档