当前位置: 首页 > 工具软件 > UIView-Shake > 使用案例 >

ios中的shake

夔宏深
2023-12-01

比较简单的实现。

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.

 类似资料: