首页 > 代码库 > iOS开发——全局响应MotionEvent
iOS开发——全局响应MotionEvent
遇到这样一个需求:应用无论处于哪个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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。