传感器(加速计的应用)

传感器的定义:是一种感应/检测装置,目前已经广泛应用于智能手机上。 

作用:用于感应检测周边的信息。

比如检测声音, 光线,地图手机的朝向,贴近耳朵屏幕自动锁屏,关灯自动降低亮度不会那么亮眼, 等等。 



常见的:

环境光传感器:犹豫环境变化,调节屏幕亮度; 或者拍照,闪光灯在夜晚会 自动开启;mac的背光键盘,当周围光线弱到一定条件自动开启键盘背光。       没有api.   (自动调节屏幕亮度)

1.  距离传感器:打电话关闭屏幕,省电和防止意外操作;  语音,在耳边是话筒, 不在耳边是扩音。  (打电话自动所屏)

磁力计传感器: 电子罗盘, 导航应用; ipad的smart cover盒盖锁屏。  讲过了。   (合盖锁屏)

内部温度传感器:安全和稳定性。  没有api.   (提醒用户降温,防止损伤设备)

湿度传感器:是一个简单的 物理传感器, 遇水变红。  没有api.   (方便维修人员)

内部陀螺仪:iphone4以上,用于检测设备的握方式。 x,y,z所旋转的角速度。 模拟汽车方向盘的旋转动作。   (赛车类游戏)

2. 运动传感器/加速度传感器/加速计:(摇一摇, 计步器。 )


1.  距离传感器:打电话关闭屏幕,省电和防止意外操作;  语音,在耳边是话筒, 不在耳边是扩音。  (打电话自动所屏)

1. 开启功能。 

2.监听通知。 

3.实现监听方法。 


2.加速计: 就是检测x,y.z轴的加速度。  看哪个方向受力。 

可以看一下效果。 

原理: ios4以前, ios4之后 (包括ios4)

1.获取单例对象

2.设置代理

3设置采样间隔

4实现代理方法


     ios4以前:

    // 1.获取单例对象

    UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];

    // 2.设置代理

    accelerometer.delegate=self;

    // 3.设置采样间隔

    [accelerometersetUpdateInterval:0.3];

- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration

{

    NSLog(@"x:%f y:%f z:%f", acceleration.x, acceleration.y, acceleration.z);

}


ios4之后(包括ios4):

coremotion.framework框架。 (加速度升级 加入了陀螺仪)

core motion 不仅能够提供实时的加速度值 和旋转速度值, 更重要的是, 苹果在其中集成了 很多牛逼的算法。 

core motion 获取数据的两种方式:push(实时采集所有数据,采集频率高),  

                                                        pull模式()。 

push:   有个对象可以获取当前加速度的值,  一旦值发生变化, 通过block,代理,通知, 向外界推数据。  内部向外的数据。不会错过任何一个数据。  

pull:    外界想拿数据, 外界可以从这里主动去拉数据。 别人主动来拿的数据。  需要的时候拉, 错过一些数据。 

push:1.  创建一个运动管理者对象。 

         2.  判断加速计是否可以用。 (最好判断, 以防止加速计不好用的时候,客户不知道)。

    if (!self.mgr.isMagnetometerAvailable) {

        return;

    }

         3. 设置采样间隔。 

        4.  开始采样。采样到数据就会调用handler, handler会在queue中执行。 

        push :

 把数据告诉外界:

        if(error)return;

        CMMagneticFieldfield = magnetometerData.magneticField;

        NSLog(@"x:%f y:%f z:%f", field.x, field.y, field.z);


         pull :

开始采集数据。

只获取数据, 但不推送给外界, 外界想要数据, 自己来拿。 

直接读取数据就可以。 不需要代理什么的。 

accelerometerData--->   acceleration-->

  {

    // 1.获取加速计信息

    CMAcceleration acceleration = self.mgr.accelerometerData.acceleration;

    NSLog(@"x:%f y:%f z:%f", acceleration.x, acceleration.y, acceleration.z);

    // 2.获取陀螺仪信息

    CMRotationRate rate = self.mgr.gyroData.rotationRate;

    NSLog(@"x:%f y:%f z:%f", rate.x, rate.y, rate.z);

  }


摇一摇功能。例如摇一摇加好友。

方法1:  摇一摇, 可以判断, 一个x.y.x方向的值 。是一个方法。但是值太大或者太小都不好。  (复杂)

方法2:ios自带的shake api监控的方法 来实现摇一摇。 (简单)

- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent*)event

{

    NSLog(@"开始摇一摇");

}

- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent*)event

{

    NSLog(@"摇一摇被取消");

}

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent*)event

{

    NSLog(@"摇一摇停止");

}

使用过程就是在开始motionBegan做一些动画, 结束motionEnded就结束动画然后搜索周边的好友 或者下一首等等。 


计步器:

作用:判断当前的楼层, 当前走了多少步。 

一受力一停止受力。  结合定位。 

你只要摇的话, 是没有位置变动的。 所以没用。 

ios8以前

和ios8以后(包括ios 8)


ios8以前

#import <CoreMotion/CoreMotion.h>

CMStepCounter


和ios8以后(包括ios 8)

CMPedometer

// 0.判断计步器是否可用

    if (![CMPedometer isStepCountingAvailable]) {

        NSLog(@"计步器不可用");

        return;

    }

// 1.创建计步器对象

 // 2.开始计步


UIDynamic

UIDynamics隶属于uikit框架, ios7开始引入的,物理引擎,可以模仿一些重力,弹性碰撞等物理现象。 

价值:广泛应用于游戏开发, 经典的案例是“愤怒的小鸟”。

 由于有了这个框架, 很好的解决了简单的物理计算。 

知名的2D物理引擎。 Box2d, Chipmunk。 如果你具体做这个物理现象的话, 就是要自学相关的物理引擎。

实现步骤:

创建一个物理仿真器(设置仿真范围);

创建物理仿真行为(添加仿真元素);

将物理仿真行为添加到物理仿真器中;开始仿真。

三个概念:1. 物理仿真元素:谁来执行。

2.物理仿真行为:执行什么。 仿真行为?仿真动画?

3.物理仿真器:让元素执行行为。 

哪些对象可以做物理仿真元素:任何遵守了UIDynamicItem协议的对象。

UIView, UICollectionViewLayoutAttributes等默认都遵守了协议。

所有的行为都可以组合和单独运行。

 // 根据仿真元素创建推动行为

    UIPushBehavior


 // 创建捕捉行为(快速的移动到这个位置,就是捕捉这个点)

    UISnapBehavior

    // 注意, 如果想多次执行捕捉行为, 需要在之前移除之前添加的捕捉行为

    [self.animator removeAllBehaviors];

    // 创建捕捉行为

    UISnapBehavior *snapBehavior = [[UISnapBehavior alloc] initWithItem:self.boxView snapToPoint:point];

    // 设置振幅

    snapBehavior.damping=0.0;(设置量级,代表震动,范围是0.0到1.0之间,0.0弹性最大,1.0的动作最生硬,没有弹性)

    // 添加捕捉行为到仿真器

    [self.animatoraddBehavior:snapBehavior];



  // 创建碰撞行为(根据仿真元素)

    UICollisionBehavior 

//    UICollisionBehaviorModeItems        = 1 << 0, // 只碰撞物体, 不碰撞边界(两个掉出边界)

//    UICollisionBehaviorModeBoundaries  = 1 << 1, // 只碰撞边界, 不碰撞物体(不碰撞,一个到边界拦住)

//    UICollisionBehaviorModeEverything  = NSUIntegerMax // 什么玩意都碰撞(两个都到边界拦住)


三种办法设置边界:

//其中一种是:

  碰撞的边界就是 最右边的延长线。 

  // 添加碰撞检测边界

 //@“line”是标识

    [collisionBehavoraddBoundaryWithIdentifier:@"line" fromPoint:CGPointMake(0, 600) toPoint:CGPointMake(self.view.bounds.size.width, 200)];


//代理:

设置碰撞代理来 监听碰撞事件。

如果你想知道碰撞的时间,边界, 两个碰撞的 元素是什么。可以设置一个代理。

  // 重力行为

    UIGravityBehavior

   属性:gravityDirection(重力方向,重力速度), angle(角度), magnitude(量级)。setAngle(角度和量级一起修改)




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容