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

版权声明:本文博主原创文章,博客,未经同意不得转载。

posted @ 2015-10-16 17:11  zfyouxi  阅读(191)  评论(0编辑  收藏  举报