zoukankan      html  css  js  c++  java
  • 全局响应MotionEvent

    遇到这样一个需求:应用无论处于哪个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
  • 相关阅读:
    TC(Total Commander)文件管理神器
    友盟 集成测试
    Channel SDK (渠道SDK) for Unity
    Prefab Assist插件
    Android资源(图片)命名规范
    FragmentTransaction的commit的异步操作
    面试2
    Git中.gitignore文件不起作用的解决以及Git中的忽略规则介绍
    Android必知必会-Android Studio修改包名
    Http标准协议Android网络框架——NoHttp
  • 原文地址:https://www.cnblogs.com/langji/p/5564206.html
Copyright © 2011-2022 走看看