ios shake

iOS: ¿Cómo detectar el movimiento Shake?



(4)

Agregué el siguiente código a mi appDelegate.m

- (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 { } - (void)shakeSuccess { // do something... }

y luego agregué:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. // INIT THE BACKGROUND PATH STRING [self refreshFields]; [self.window addSubview:navController.view]; [self.window makeKeyAndVisible]; ***[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shakeSuccess) name:@"shake" object:nil];*** return YES; }

Cuando inicio mi aplicación en mi iPhone, el método llamado "shakeSuccess" no es válido. ¿Qué debo hacer para implementar esta función en mi aplicación? ¿alguna idea?


Esto podría ayudarte ...
https://.com/a/2405692/796103

Él dice que debes configurar la applicationSupportsShakeToEdit UIApplication en YES . y anula 3 métodos en tu CV:

-(BOOL)canBecomeFirstResponder { return YES; } -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self becomeFirstResponder]; } - (void)viewWillDisappear:(BOOL)animated { [self resignFirstResponder]; [super viewWillDisappear:animated]; }

El resto de tu código está bien. (the -motionEnded:withEvent:


Extendí la clase UIApplication y agregué referencia de clase a main: MyApplication.h

@interface MyApplication : UIApplication @end

MyApplication.m

@implementation MyApplication - (void) sendEvent:(UIEvent *)event { if( event && (event.subtype==UIEventSubtypeMotionShake)) { AppDelegate *objAppDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; [objAppDelegate doWhatEver]; [super sendEvent:event]; } else { [super sendEvent:event]; } } @end

Y el último paso en main.m

int main(int argc, char *argv[]) { return UIApplicationMain(argc, argv, NSStringFromClass([MyApplication class]), NSStringFromClass([AppDelegate class])); }

Esto funciona en todos los casos.


Podrías hacer algo como esto ...

En primer lugar...

Establezca la propiedad applicationSupportsShakeToEdit en el delegado de la aplicación:

- (void)applicationDidFinishLaunching:(UIApplication *)application { application.applicationSupportsShakeToEdit = YES; [window addSubview:viewController.view]; [window makeKeyAndVisible]; }

En segundo lugar...

Agregar / Reemplazar canBecomeFirstResponder, viewDidAppear: y viewWillDisappear: métodos en su View Controller:

-(BOOL)canBecomeFirstResponder { return YES; } -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self becomeFirstResponder]; } - (void)viewWillDisappear:(BOOL)animated { [self resignFirstResponder]; [super viewWillDisappear:animated]; }

En tercer lugar...

Agregue el método motionEnded a su controlador de vista:

- (void)motionEnded:(UIEventSubtype)motion withEvent:(UIEvent *)event { if (motion == UIEventSubtypeMotionShake) { // your code } }

Eso debería funcionar si la primera respuesta no lo hizo y esto solo se escribe rápidamente y no se prueba :)


Si desea poder detectar el movimiento de vibración en la aplicación, la mejor manera es anular la clase de su aplicación con una clase personalizada.

Y luego implementa esto en tu clase de aplicación personalizada

@implementation PSApplication - (void)sendEvent:(UIEvent *)event { if ( event.type == UIEventTypeMotion && event.subtype == UIEventSubtypeMotionShake ) { [[NSNotificationCenter defaultCenter] postNotificationName:@"shakeNotification" object:nil]; } [super sendEvent:event]; } @end