iOS 获取整个app在屏幕上的点击坐标

项目中有个需求是想拿到app里所有在屏幕上的点击坐标
解决方案创建一个子类继承自UIApplication,然后在sendEvent方法中获取并判断

#import "MRApplication.h"
#include <CommonCrypto/CommonCrypto.h>

@interface MRApplication()

@property(nonatomic,assign) BOOL isMoved;

@end

@implementation MRApplication

- (void)sendEvent:(UIEvent *)event{
    if (event.type==UIEventTypeTouches) {
        UITouch *touch = [event.allTouches anyObject];
        
        if (touch.phase == UITouchPhaseBegan) {
            self.isMoved = NO;
        }
        
        if (touch.phase == UITouchPhaseMoved) {
            self.isMoved = YES;
        }
        
        if (touch.phase == UITouchPhaseEnded) {
            if (!self.isMoved && event.allTouches.count == 1) {
                UITouch *touch = [event.allTouches anyObject];
                CGPoint locationPointWindow = [touch preciseLocationInView:touch.window];
                NSLog(@"TouchLocationWindow:(%.1f,%.1f)",locationPointWindow.x,locationPointWindow.y);
            }
            self.isMoved = NO;
        }
    }
    [super sendEvent:event];
}

@end

其实在touch对象中已经有了View的信息,如果想获取在view中的相对坐标也可以.使用touch.view即可
CGPoint locationPointWindow = [touch preciseLocationInView:touch.view];

注意:这个MRApplication需要在main.m中引入,然后就可以拦截整个app所有的点击事件了,其中我对滑动和多点触控做了处理,不加if判断是会拿到滑动和多点触控时的UIEvent

#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import "MRApplication.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, NSStringFromClass([MRApplication class]), NSStringFromClass([AppDelegate class]));
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,617评论 25 708
  • 好奇触摸事件是如何从屏幕转移到APP内的?困惑于Cell怎么突然不能点击了?纠结于如何实现这个奇葩响应需求?亦或是...
    Lotheve阅读 58,163评论 51 603
  • 响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件。我们称之...
    JonesCxy阅读 715评论 0 0
  • 在iOS开发中经常会涉及到触摸事件。本想自己总结一下,但是遇到了这篇文章,感觉总结的已经很到位,特此转载。作者:L...
    WQ_UESTC阅读 6,140评论 4 26
  • 今天的大事是见MoHan 著名印度占星师。他是非常有原则的人,不改期不推迟,每人30分钟,银货两讫,他说啥就是啥。...
    莎珈阅读 1,261评论 7 12