如何实现iPhone的重力感应还有旋转感应,也就是术语上的陀螺仪和加速器?下面我们来用一个简单的Demo入门一下吧!
由于模拟器上不能运行这个,所以只能贴出代码,没有截图。
ViewController.h:
#import <UIKit/UIKit.h>
@interface BIDViewController : UIViewController<UIAccelerometerDelegate>
@property (weak, nonatomic) IBOutlet UILabel *accelerometerLabel;
@property (weak, nonatomic) IBOutlet UILabel *gyroscopeLabel;
@end
ViewController.m:
#import "BIDViewController.h"
#import <CoreMotion/CoreMotion.h>
@interface BIDViewController ()
@property (strong, nonatomic) CMMotionManager *motionManager;
@property (strong, nonatomic) NSOperationQueue *queue;
@end
@implementation BIDViewController
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.motionManager = [[CMMotionManager alloc] init];
self.queue = [[NSOperationQueue alloc] init];
if (self.motionManager.accelerometerAvailable) {
self.motionManager.accelerometerUpdateInterval = 1.0 / 10.0;
[self.motionManager startAccelerometerUpdatesToQueue:self.queue
withHandler:
^(CMAccelerometerData *accelerometerData, NSError *error) {
NSString *labelText;
labelText = [NSString stringWithFormat:
@"Accelerometer\n-----------\nx: %+.2f\ny: %+.2f\nz: %+.2f",
accelerometerData.acceleration.x,
accelerometerData.acceleration.y,
accelerometerData.acceleration.z];
NSLog(@"%@",labelText);
}];
} else {
self.accelerometerLabel.text = @"This device has no accelerometer.";
}
if (self.motionManager.gyroAvailable) {
self.motionManager.gyroUpdateInterval = 1.0 / 10.0;
[self.motionManager startGyroUpdatesToQueue:self.queue withHandler:
^(CMGyroData *gyroData, NSError *error) {
NSString *labelText;
labelText = [NSString stringWithFormat:
@"Gyroscope\n--------\nx: %+.2f\ny: %+.2f\nz: %+.2f",
gyroData.rotationRate.x,
gyroData.rotationRate.y,
gyroData.rotationRate.z];
NSLog(@"%@",labelText);
}];
} else {
self.gyroscopeLabel.text = @"This device has no gyroscope";
}
}
@end