Jef*_*ume 9 iphone transform accelerometer layer gyroscope
我在ViewController中有一系列图像.
我通过改变他们各自的层来"漂浮"它们:
img.layer.transform = CATransform3DMakeTranslation(0.0f, 0.0f, myZ);
Run Code Online (Sandbox Code Playgroud)
这样可以使图层浮动在屏幕上方 - 在模拟器中,没有可见效果(这是正确的).
我想要做的是具有这样的效果:向左/向右/向前/向后移动设备会使其看起来像层浮动一样微妙.将设备向左倾斜时,应将整个视图向右倾斜.这会让你感觉移动设备可以让你看到周围的角落 - 也就是说它会让人感觉图像真的漂浮在屏幕上方,因为它们会以不同的速度移动(基于它们的z指数).
我已经制作了一个测试项目(这里是项目文件),它有一个示例项目来演示这个.
我的问题是我不是一个数学家,所以我正在努力用最好的方法来模拟微妙的浮动效果.现在,我有一个DeviceMotion的监听器,然后执行:
self.view.layer.sublayerTransform = CATransform3DMakeRotation(20.0f * M_PI / 180.0f, 2*motion.attitude.pitch, -2*motion.attitude.roll, 0);
Run Code Online (Sandbox Code Playgroud)
这非常接近我想要的,但它并不完全正确.
我认为这种效果可以在许多不同的应用中使用.我希望将此扩展到朋友和我正在进行的人脸检测(因此它会根据人脸的移动移动父视图 - 即使他们保持手机/设备完全静止).
我意识到我会让人们回答"只是使用OpenGL".这不是我需要的答案 - 除非你发布一大堆代码,展示如何在这个项目中集成它.(我不是在寻找新问题来解决.:-)
同样,完整的项目在这里(iphone浮动视图)适合任何想要看到效果的人.(当这个工作时,我会将完整的(工作)项目留在这里,以供后人使用.)
我想我已经拥有了!用这个:
[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;
}];
Run Code Online (Sandbox Code Playgroud)
对我来说就像魅力一样,如果你想翻转轴,只需在那些1前面添加减号.
| 归档时间: |
|
| 查看次数: |
2634 次 |
| 最近记录: |