比較簡單的實現。
UIResponder類中有幾個監控響應的
Responding to Touch Events
– touchesBegan:withEvent:
– touchesMoved:withEvent:
– touchesEnded:withEvent:
– touchesCancelled:withEvent:
Responding to Motion Events
– motionBegan:withEvent:
– motionEnded:withEvent:
– motionCancelled:withEvent:
我們現在用到監控shake的可以用到– motionEnded:withEvent:
其中參數event可用的是
typedef enum {
UIEventSubtypeNone = 0,
UIEventSubtypeMotionShake = 1,
UIEventSubtypeRemoteControlPlay = 100,
UIEventSubtypeRemoteControlPause = 101,
UIEventSubtypeRemoteControlStop = 102,
UIEventSubtypeRemoteControlTogglePlayPause = 103,
UIEventSubtypeRemoteControlNextTrack = 104,
UIEventSubtypeRemoteControlPreviousTrack = 105,
UIEventSubtypeRemoteControlBeginSeekingBackward = 106,
UIEventSubtypeRemoteControlEndSeekingBackward = 107,
UIEventSubtypeRemoteControlBeginSeekingForward = 108,
UIEventSubtypeRemoteControlEndSeekingForward = 109,
} UIEventSubtype;
我們用來進行判定shake的是UIEventSubtypeMotionShake
看下面的代碼實現。
//ShakeWindow.h
#import <UIKit/UIKit.h>
@interface ShakeWindow : UIView
@end
//ShakeWindow.m
#import "ShakeWindow.h"
@implementation ShakeWindow
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}
/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/
-(void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
}
-(void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
if (motion == UIEventSubtypeMotionShake )
{
// User was shaking the device. Post a notification named "shake".
[[NSNotificationCenter defaultCenter] postNotificationName:@"shake" object:self];
}
}
-(void)motionCancelled:(UIEventSubtype)motion withEvent:(UIEvent *)event
{
}
@end
在別的地方添加使用這個wiindow,然後監控實現:
........
{
//add the shake noticefication.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shakeme) name:@"shake" object:nil];
......
}
-(void) shakeme
{
UIAlertView *alertview = [[UIAlertView alloc] initWithTitle:@"Bing" message:@"shake me" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
[alertview show];
}
That's Over.