项目中有个需求是想拿到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上才支持。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)