全局响应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
上一篇:HDU/HDOJ 2087 剪花布条


下一篇:WinForm TreeView递归加载