iOS平台使用陀螺仪传感器
在移动端开发过程中,有时候会用到陀螺仪传感器获取当前手机的姿态,下面给出iOS端如何获取陀螺仪姿态数据的代码:
- //根据陀螺仪的四元数转换为矩阵
- + (GLKMatrix4)calculateMatrixFromQuaternion:(CMQuaternion*)quaternion orientation:(AVCaptureVideoOrientation) orientation{
- float xx = quaternion->x * quaternion->x;
- float yy = quaternion->y * quaternion->y;
- float zz = quaternion->z * quaternion->z;
- float xy = quaternion->x * quaternion->y;
- float wz = quaternion->w * quaternion->z;
- float wy = quaternion->w * quaternion->y;
- float xz = quaternion->x * quaternion->z;
- float yz = quaternion->y * quaternion->z;
- float wx = quaternion->w * quaternion->x;
- float r00 = - * (yy + zz);
- float r01 = * (xy - wz);
- float r02 = * (wy + xz);
- float r03 = ;
- float r10 = * (xy + wz);
- float r11 = - * (xx + zz);
- float r12 = * (yz - wx);
- float r13 = ;
- float r20 = * (xz - wy);//xy - wy
- float r21 = * (yz + wx);
- float r22 = - * (xx + yy);
- float r23 = ;
- float r30 = ;
- float r31 = ;
- float r32 = ;
- float r33 = ;
- return GLKMatrix4Make(r00,r01,r02,r03,
- r10,r11,r12,r13,
- r20,r21,r22,r23,
- r30,r31,r32,r33);
- }
- //当前屏幕的方向
- @property (nonatomic, readwrite, assign) AVCaptureVideoOrientation orientation;
- //开启陀螺仪
- - (void)updateAngleFromAttitudeSensor{
- if(self.cmmotionManager){
- }else{
- self.cmmotionManager = [[CMMotionManager alloc] init];
- self.cmmotionManager.deviceMotionUpdateInterval = 1.0/25.0;
- self.cmmotionManager.gyroUpdateInterval = 1.0/25.0;
- self.cmmotionManager.showsDeviceMovementDisplay = YES;
- NSOperationQueue *mQueue = [[NSOperationQueue alloc]init];
- __weak typeof(self) wSelf = self;
- [wSelf.cmmotionManager startDeviceMotionUpdatesToQueue:mQueue withHandler:^(CMDeviceMotion * _Nullable motion, NSError * _Nullable error){
- CMAttitude *attitude = motion.attitude;
- if (attitude == nil) {
- return;
- }
- //UID
- CMQuaternion quaternion = attitude.quaternion;
- wSelf.sensorMatrix = GLKMatrix4Identity;
- wSelf.sensorMatrix = [GyroscopeUtil calculateMatrixFromQuaternion:&quaternion orientation:orientation];
- wSelf.sensorMatrix = GLKMatrix4RotateX(wSelf.sensorMatrix,M_PI_2);
- wSelf.sensorInverseMatrix = GLKMatrix4Identity;
- bool isInvertible = true;
- wSelf.sensorInverseMatrix = GLKMatrix4Invert(wSelf.sensorMatrix, &isInvertible);
- }];
- }
- }
iOS平台使用陀螺仪传感器的更多相关文章
- iOS开发——高级篇——传感器(加速计、摇一摇、计步器)
一.传感器 1.什么是传感器传感器是一种感应\检测周围环境的一种装置, 目前已经广泛应用于智能手机上 传感器的作用用于感应\检测设备周边的信息不同类型的传感器, 检测的信息也不一样 iPhone中的下 ...
- 【android】移植IOS视图响应陀螺仪交互行为
IOS有个很有趣味的特性:背景图片可以响应陀螺仪方向的变化,去改变X.Y轴上的值,从而让整个界面看着充满着灵性.具体步骤是:解锁苹果产品,在IOS7以上,摆动手势,观察桌面背景图片的变化. 刚好,我们 ...
- 通过OpenGL ES在iOS平台实践增强现实
http://www.cnblogs.com/elvisyzhao/p/3398250.html 本文采用OpenGL ES 1固定渲染管线实现,目标为在设备拍摄到的现实世界中,绘制世界坐标轴,并根据 ...
- 通过OpenGL ES在iOS平台实践增强现实(一)
http://ios.9tech.cn/news/2013/1108/38495.html 1.本文采用OpenGL ES 1固定渲染管线实现,目标为在设备拍摄到的现实世界中,绘制世界坐标轴,并根据设 ...
- iOS平台快速发布HT for Web拓扑图应用
iOS平台一直是封闭的生态圈,iOS开发者要缴纳年费加入开发者计划才可进行iOS平台的APP开发测试,所开发的APP需要上传到App Store经过苹果审核以后才可对外发布.如果要开发企业内部应用,则 ...
- (译)cocos2d-x跨android&ios平台开发入门教程
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播.同时,转载时不要移除本申明.如产生任何纠纷,均与本博客所有人.发表该翻译稿之人无任何关系.谢谢合作 ...
- [原创]自定义控件之AndroidSegmentControlView,仿IOS平台UISegmentControlView,继承自View
版权声明:本文为博主原创文章,转载请注明出处. 控件简介 UISegmentControl在IOS平台的App中非常常见,其控件如下图所示: 这种控件的主要作用是动态的更改界面的显示内容,一般应用于内 ...
- [转]ios平台内存常见问题
本文转自CocoaChina,说的满详细的: 链接地址:http://www.cocoachina.com/bbs/read.php?tid=94017&keyword=%C4%DA%B4%E ...
- U3D中IOS平台泛型方法尽少使用
U3D的IOS最小运行库use micro mscorlib是不包含泛型反射方法的,如FieldType.GetGenericArguments方法.所以尽量少用List而直接使用array. 另外请 ...
随机推荐
- C# Redis Server分布式缓存编程 --网络转载
这篇文章我将介绍如果用最简洁的方式配置Redis Server, 以及如何使用C#和它交互编程 一. 背景介绍 Redis是最快的key-value分布式缓存之一 缺点: 没有本地数据缓冲, 目前还没 ...
- [BZOJ 3123]森林
这题和 COT1 一定有 JQ 喵~ 线段树的启发式合并,每次要连接两个点时就对比较小的那棵树暴力 DFS 一边 然后均摊时间依旧是 logn 的,均摊真是世界上最邪恶的东西了…… 然后这题的数据是要 ...
- phpstorm 配置 babel 支持EcmaScript6
1.安装nodejs 2.npm install --save-dev babel-cli 3.npm install babel-preset-es2015 --save-dev 4.phpstor ...
- Lua词汇约定
Lua的标识符包含数字,字母以及下划线,数字不能作为标识符的开头. and break do else elseif end false for function goto if in local n ...
- 转载:Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04
原文 http://www.powerxing.com/install-hadoop/ 当开始着手实践 Hadoop 时,安装 Hadoop 往往会成为新手的一道门槛.尽管安装其实很简单,书上有写到, ...
- putty+xming远程登录Ubuntu16.04图形界面
前面我写过一篇<Ubuntu16.04 安装ftp服务器传输文件>的文章.文章当中已经可以远程访问linux服务器并且传输文件,然而要在putty中使用开启图形界面的命令到目前为止还是不够 ...
- cPage分页详细介绍
asp.net中各种数据控件,datalist.gridview.Repeater等分页是最常用的功能,几乎任何一个B/S项目,无论是系统还是网站都会用到.分页时,读取整个数据,直接绑定到控件,都可以 ...
- android模拟器停在Waiting for HOME解决方案
直接打开Android SDK Manager然后再从Android SDK Manager里的tools打开Android AVD Manager,删除掉在Eclipse里创建的模拟器.并在新建一个 ...
- LeetCode "Third Maximum Number"
Straight-forward strategy.. please take care of all details - data type, assignment order etc. class ...
- ruby 中%Q %q %W %w %x %r %s的用法
%Q 用于替代双引号的字符串. 当你需要在字符串里放入很多引号时候, 可以直接用下面方法而不需要在引号前逐个添加反斜杠 (\") >> %Q(Joe said: "Fr ...