iOS开发——全局响应MotionEvent

来源:互联网 发布:研究所20升级数据 编辑:程序博客网 时间:2024/05/22 17:47

遇到这样一个需求:应用无论处于哪个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

0 0
原创粉丝点击