遇到这样的要求:无论在哪个应用程序view controller,摇动手机,我们可以启动的方法。
你可以认为这个想法是使用包装的苹果“MotionEvent”。但是,假如简单地把代码添加到view controller于,所以只存在view controller示在前端时,摇动手机才会出发方法。
- (BOOL)canBecomeFirstResponder {//默认是NO,所以得重写此方法,设成YES return YES; } 然后实现下列方法://非常像TouchEvent事件 - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event { } - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event { NSLog(@"shake"); } - (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event { }
解决方法:用Category扩展UIWindow。代码例如以下:
UIWindow+.h
#import <UIKit/UIKit.h> #define UIEventSubtypeMotionShakeNotification @"UIEventSubtypeMotionShakeNotification" @interface UIWindow (Motion) // @override - (BOOL)canBecomeFirstResponder; - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event; @end
UIWindow+.m
#import "UIWindow+.h" @implementation UIWindow (Motion) - (BOOL)canBecomeFirstResponder {//默认是NO,所以得重写此方法。设成YES return YES; } 然后实现下列方法://非常像TouchEvent事件 - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event { } - (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event { NSLog(@"shake"); } - (void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event { } @end
版权声明:本文博主原创文章,博客,未经同意不得转载。