首页 > 移动平台 > 详细

iOS开发——全局响应MotionEvent

时间:2014-06-27 08:01:01      阅读:362      评论:0      收藏:0      [点我收藏+]

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

iOS开发——全局响应MotionEvent,布布扣,bubuko.com

iOS开发——全局响应MotionEvent

原文:http://blog.csdn.net/yuanbohx/article/details/34898927

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!