ios中的shake

比較簡單的實現。

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.

發佈了74 篇原創文章 · 獲贊 1 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章