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

iOS 获取整个app在屏幕上的点击坐标,第1张

项目中有个需求是想拿到app里所有在屏幕上的点击坐标

解决方案创建一个子类继承自 UIApplication ,然后在 sendEvent 方法中获取并判断

其实在 touch 对象中已经有了View的数告衫信息,如果想获取在view中的相对坐标也可以.使用 touch.view 即可

CGPoint locationPointWindow = [touch preciseLocationInView:touch.view]

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

CGRect rect_screen = [[UIScreenmainScreen]bounds]

CGSize size_screen = rect_screen.size

CGFloat scale_screen 型慎= [UIScreenmainScreen].scale

CGFloat width = size_screen.width*scale_screen

CGFloat height = size_screen.height*scale_screen

NSLog(@"width:%f",width)

NSLog(@"height:%f",height)

2015-03-0415:35:06.340reader[10697:179349]width:640.000000

2015-03-0415:35:06.341reader[10697:179349]height:1136.000000

上述情况在iphone6和iPhone6 Plus的缩放模式下,和iPhone5S获取到的分辨率是卜笑敬一样的。

别忘记iphone 6 6+有放大模式和,正常模升搭式

#define iPhone5 ([UIScreen

instancesRespondToSelector:@selector(currentMode)] ?

CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen]

currentMode].size) : NO)

//放大版的iphone6等于Iphone5的分辨率《求区别办法》

#define iPhone6 ([UIScreen

instancesRespondToSelector:@selector(currentMode)] ?

(CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen]

currentMode].size) || CGSizeEqualToSize(CGSizeMake(640, 1136),

[[UIScreen mainScreen] currentMode].size)) : NO)

#define iPhone6plus ([UIScreen

instancesRespondToSelector:@selector(currentMode)] ?

(CGSizeEqualToSize(CGSizeMake(1125, 2001), [[UIScreen mainScreen]

currentMode].size) || CGSizeEqualToSize(CGSizeMake(1242, 2208),

[[UIScreen mainScreen] currentMode].size))

: NO)

简单的方法就不可能做到适配得很好,要做到完美适配就必须花费比较大的代价。

现目前最好适配各种悉没尺寸屏幕的方法就是autolayout.只要设置好了盯陆察限制条件,不管屏幕尺寸怎么变都能比较好的适配。

不过苹果在ios8上最新发布了一凯茄个叫size classes的屏幕布局的解决方案。不过只能在ios8上才支持。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12518931.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存