博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】iphone 重力感应器详解.
阅读量:6118 次
发布时间:2019-06-21

本文共 2229 字,大约阅读时间需要 7 分钟。

本文摘自:

 

所謂的加速感應器是利用使用者對  device 所做的力量來衡量其  與 重力 ,偵測三個方向的加速度,即 x,y,z 軸,透過 (x,y,z) 軸所丟出的參數,你可以得知類似以下狀況

(1) i 是正面朝上還是背面朝上

(2) 使用者是正拿著還是測拿著 (可以配合自動旋轉)

(3) 使用在把手機拿動了多少距離,包括上下左右

加速感應器 (Acceleration) 偵測的單位為 g力 (即重力),正常情況我們都會受地心引力所影響,即一個 g 力,用平常的直立方式觀看 iPh ,則其會在 y 軸得到 1g 的重力,而傾斜後就會在不同方向得到分散的 g 力,而如果快速移動你的 iPhone 的話,加速感應器則可以偵測 g 力的瞬間變化,來得知 iPhone 的移動。



在使用加速感應器的時候你必須一個遵循 AccelerometerDelegate 協定的 UIAccelerometer 類別,UIAccelerometer是以單例模式(sgleton) 存在,再產生一個實例並 將此實例成為加速感應器的委派,宣告實例的程式碼如下:



1 UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];

  再來你可以設定此實例的 頻率,你可以用以下程式碼來設定之,表示 30 秒更新

1 <span class="le-style-span">accelerometer.delegate = self;
2  
3 </span>accelerometer<span class="Apple-style-span">.updateInterval  = 1.0f / 30.0f ;
4 </span>

  設定完委派後,你就必須要實做 accelerometer:didAccelerate ,這個方法接受兩個引數,第一個負責 UIAccelerometer 實例的參考,第二個是 UIAccleration 物件,下面的應用方式是將偵測到的加速度值顯示在某個 label 上面

-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
 
NSString *accelerateNum  = [[NSString alloc] initWithFormat:@" X: %g\tY:%g\tZ:%g", acceleration.x , acceleration.y, acceleration.z];
 
label.text = accelerateNum ;
 
[accelerateNum release];
 

至於如果要 偵測搖晃 的話,可以利用下面這段程式碼  


view sourceprint?
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
 
    if (fabsf (acceleration.x) > 1.0) {
 
         //表示 X 軸方向大於 1 的時候就會發生某事
 
    }
 
}
 

 

 另一个例子:

 

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

    static NSInteger shakeCount=0;
    static NSDate *shakeStart; 
    NSDate *now=[[NSDate alloc] init];
    //搖晃時間在2秒內
    NSDate *checkDate=[[NSDate alloc] initWithTimeInterval:2.0f sinceDate:shakeStart];  
    //超過2秒則重新計算搖晃次數
    if ([now compare:checkDate]==NSOrderedDescending||shakeStart==nil){
        shakeCount=0;
        [shakeStart release];
        shakeStart=[[NSDate alloc] init];                             
    }   
    [now release];
    [checkDate release];  
    //三軸搖晃的G力超過2列入計次
    if (fabsf(acceleration.x)>2.0 || fabsf(acceleration.y)>2.0|| fabsf(acceleration.z)>2.0){
        shakeCount++;       
        //2秒內偵測到4次則判定為Shake搖晃手機
        if (shakeCount>4){
            shakeCount=0;
            [shakeStart release];
            shakeStart=[[NSDate alloc] init];
    switch (TabBarController.selectedIndex) {
            case 0:
               NSLog(@"1111");
                break;
            case 1:
                NSLog(@"2222");
                break;
            default:
                break;
 

        }

 

 

 

 

 

 

转载地址:http://dcvka.baihongyu.com/

你可能感兴趣的文章
会计基础_001
查看>>
Cordova 开发环境搭建及创建第一个app
查看>>
ajax请求拿到多条数据拼接显示在页面中
查看>>
小程序: 查看正在写的页面
查看>>
dedecms生成文档数据库崩溃 mysql daemon failed to start
查看>>
Linux的50个基本命令
查看>>
Objective-C中创建单例方法的步骤
查看>>
[转]无法安装MVC3,一直卡在vs10-kb2483190
查看>>
Codeforces 520B:Two Buttons(思维,好题)
查看>>
web框架-(二)Django基础
查看>>
Jenkins持续集成环境部署
查看>>
emoji等表情符号存mysql的方法
查看>>
检查磁盘利用率并且定期发送告警邮件
查看>>
MWeb 1.4 新功能介绍二:静态博客功能增强
查看>>
linux文本模式和文本替换功能
查看>>
Windows SFTP 的安装
查看>>
摄像机与绕任意轴旋转
查看>>
rsync 服务器配置过程
查看>>
预处理、const与sizeof相关面试题
查看>>
爬虫豆瓣top250项目-开发文档
查看>>