加速计

来源:互联网 发布:笑知大学话剧 编辑:程序博客网 时间:2024/04/28 22:18

#import "RootViewController.h"#include<CoreMotion/CoreMotion.h>#import<CoreFoundation/CoreFoundation.h>@interface RootViewController ()@property (strong,nonatomic) CMMotionManager *motionManager;@property (strong,nonatomic) NSOperationQueue *queue;@property (strong,nonatomic) NSTimer *updateTimer;@property (strong,nonatomic) UILabel *accelerometerLabel;@end@implementation RootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];    if (self) {        // Custom initialization    }    return self;}- (void)viewDidLoad{    [super viewDidLoad];    // Do any additional setup after loading the view.        self.motionManager = [[CMMotionManager alloc] init];    self.queue = [[NSOperationQueue alloc] init];    if (self.motionManager.accelerometerAvailable) {                self.motionManager.accelerometerUpdateInterval = 1.0 / 10.0; //回调周期为10Hz        //设置回调block        [self.motionManager startAccelerometerUpdatesToQueue:self.queue                                                 withHandler:         ^(CMAccelerometerData *accelerometerData, NSError *error) {             NSString *labelText;             if (error) {                 [self.motionManager stopAccelerometerUpdates];                 labelText = [NSString stringWithFormat:                              @"Accelerometer encountered error: %@", error];             } else {                 NSLog(@"Accelerometer\n---\nx: %+.2f\ny: %+.2f\nz: %+.2f",                       accelerometerData.acceleration.x,                       accelerometerData.acceleration.y,                       accelerometerData.acceleration.z);             }         }]; } else {                          self.accelerometerLabel.text = @"This device has no accelerometer.";         }    //设置一个NSTimer在20Hz的周期内调用updateDisplay方法,这就是模仿游戏的更新模式    self.updateTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 / 10.0 target:self  selector:@selector(updateDisplay) userInfo:nil repeats:YES];}- (void)updateDisplay{if (self.motionManager.accelerometerAvailable) {        CMAccelerometerData *accelerometerData = self.motionManager.accelerometerData;        NSLog(@"Accelerometer\n---\nx: %+.2f\ny: %+.2f\nz: %+.2f",              accelerometerData.acceleration.x,              accelerometerData.acceleration.y,              accelerometerData.acceleration.z);    }}- (void)didReceiveMemoryWarning{    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}/*#pragma mark - Navigation// In a storyboard-based application, you will often want to do a little preparation before navigation- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{    // Get the new view controller using [segue destinationViewController].    // Pass the selected object to the new view controller.}*/@end


0 0
原创粉丝点击