ios使用加速计处理自动旋转,它还可以可于检测摇动和其他突发运动。
用UIDevice对象实现。访问UIDevice信息的方法:1)、通过orientation 2)、通过通知访问
1、检测摇动的方法
- (void)motionBegan:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)motionEndend:(NSSet *)touches withEvent:(UIEvent *)event;
- (void)motionCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
摇动与击碎
、h文件
#import <UIKit/UIKit.h>
#import <AudioToolbox/AudioToolbox.h>
#define kAccelerationThreshold 2.2
#define kUpdateInterval (1.0f/10.0f)
@interface ShakeAndBreakViewController : UIViewController
<UIAccelerometerDelegate> {
UIImageView *imageView;
BOOL brokenScreenShowing;
SystemSoundID soundID;
UIImage *fixed;
UIImage *broken;
}
@property (nonatomic, retain) IBOutlet UIImageView *imageView;
@property (nonatomic, retain) UIImage *fixed;
@property (nonatomic, retain) UIImage *broken;
@end
、m文件
#import "ShakeAndBreakViewController.h"
@implementation ShakeAndBreakViewController
@synthesize imageView;
@synthesize fixed;
@synthesize broken;
- (void) viewDidLoad {
UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = kUpdateInterval;
NSString *path = [[NSBundle mainBundle] pathForResource:@"glass"
ofType:@"wav"];
AudioServicesCreateSystemSoundID((CFURLRef)[NSURL
fileURLWithPath:path], &soundID);
self.fixed = [UIImage imageNamed:@"home.png"];
self.broken = [UIImage imageNamed:@"homebroken.png"];
imageView.image = fixed;
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
self.imageView = nil;
self.fixed = nil;
self.broken = nil;
[super viewDidUnload];
}
- (void)dealloc {
[imageView release];
[fixed release];
[broken release];
[super dealloc];
}
#pragma mark -
- (void)accelerometer:(UIAccelerometer *)accelerometer
didAccelerate:(UIAcceleration *)acceleration {
if (! brokenScreenShowing) {
if (acceleration.x > kAccelerationThreshold
|| acceleration.y > kAccelerationThreshold
|| acceleration.z > kAccelerationThreshold) {
imageView.image = broken;
AudioServicesPlaySystemSound (soundID);
brokenScreenShowing = YES;
}
}
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
imageView.image = fixed;
brokenScreenShowing = NO;
}
@end