今天查看苹果的API文档,突然发现摇一摇功能iOS有自带,灰常欣喜,记录一下。
在UIResponder中存在着这么一套方法:
//检测到摇动
- (void)motionBegan:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0);
//摇动结束
- (void)motionEnded:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0);
//摇动取消
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(nullable UIEvent *)event NS_AVAILABLE_IOS(3_0);
具体实现就是:
1.让viewcontroller支持摇动;
2.让viewcontroller成为第一响应者;
3.实现上面这几个方法。
代码如下:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//让viewcontroller支持摇动
[[UIApplication sharedApplication] setApplicationSupportsShakeToEdit:YES];
//让viewcontroller成为第一响应者
[self becomeFirstResponder];
}
- (BOOL)canBecomeFirstResponder {
return YES;
}
#pragma mark -
#pragma mark --支持摇动--
- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
NSLog(@"摇动开始");
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
// 添加手机响铃的方法
SystemSoundID soundId;
NSString *path = [[NSBundle mainBundle]pathForResource:@"song" ofType:@"wav"];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &soundId);
AudioServicesPlaySystemSound(soundId);
}
- (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
NSLog(@"摇动取消");
}
- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (event.subtype == UIEventSubtypeMotionShake) {
NSLog(@"摇动结束");
}
}
Demo地址:
https://github.com/KityPei/MotionDemo.git