Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5513714
  • 博文数量: 763
  • 博客积分: 12108
  • 博客等级: 上将
  • 技术积分: 15717
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-28 21:21
个人简介

业精于勤,荒于嬉

文章分类

全部博文(763)

文章存档

2018年(6)

2017年(15)

2016年(2)

2015年(31)

2014年(14)

2013年(87)

2012年(75)

2011年(94)

2010年(190)

2009年(38)

2008年(183)

2007年(28)

分类: C/C++

2010-02-09 11:44:56

說明:示範抓取加速計的資料來判斷iPhone的Shake搖動動作

示範:
AccelerometerDemo01.gif
搖晃前的預設文字:沒事

AccelerometerDemo02.gif
用力搖晃後畫面將顯示為:搖動

程式碼:
AccelerometerDemoViewController.h
  1. #import

  2. @interface AccelerometerDemoViewController : UIViewController {
  3.         IBOutlet UILabel *mylabel;
  4. }

  5. @property (nonatomic,retain) UILabel *mylabel;

  6. @end
複製代碼
AccelerometerDemoViewController.m
  1. #import "AccelerometerDemoViewController.h"

  2. @implementation AccelerometerDemoViewController

  3. @synthesize mylabel;

  4. - (void)viewDidLoad {
  5.         UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];
  6.         accelerometer.delegate = self;
  7.         accelerometer.updateInterval =  1.0f/60.0f;
  8.     [super viewDidLoad];       
  9. }

  10. - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
  11.        
  12.         static NSInteger shakeCount=0;
  13.         static NSDate *shakeStart;
  14.        
  15.         NSDate *now=[[NSDate alloc] init];
  16.         //搖晃時間在2秒內
  17.         NSDate *checkDate=[[NSDate alloc] initWithTimeInterval:2.0f sinceDate:shakeStart];
  18.        
  19.         //超過2秒則重新計算搖晃次數
  20.         if ([now compare:checkDate]==NSOrderedDescending||shakeStart==nil){
  21.                 shakeCount=0;
  22.                 [shakeStart release];
  23.                 shakeStart=[[NSDate alloc] init];                               
  24.         }
  25.        
  26.         [now release];
  27.         [checkDate release];
  28.        
  29.         //三軸搖晃的G力超過2則列入計次
  30.         if (fabsf(acceleration.x)>2.0 || fabsf(acceleration.y)>2.0|| fabsf(acceleration.z)>2.0){
  31.                 shakeCount++;
  32.                
  33.                 //2秒內偵測到4次則判定為Shake搖晃手機
  34.                 if (shakeCount>4){
  35.                         shakeCount=0;
  36.                         [shakeStart release];
  37.                         shakeStart=[[NSDate alloc] init];
  38.                        
  39.                         //畫面顯示搖動文字
  40.                         mylabel.text=@"搖動";
  41.                        
  42.         //設定2秒後自動還原               
  43.         [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(cleartext) userInfo:nil repeats:NO];
  44.                 }
  45.         }
  46. }               
  47.                        
  48. -(void)cleartext{
  49.         //預設文字
  50.         mylabel.text=@"沒事";
  51. }
複製代碼
此範例的應用相當的廣泛而有趣,早期App Store上的創意軟體如花女棒、打火機及蠟燭等軟體都是利用相同的原理實作的喔,看看您是否也能想出更好的創意。

AccelerometerDemo.zip (20.93 KB)

阅读(1686) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~