此方法返回UITouch对象在控件中的当前位置。
指定视图的坐标系。因为触摸物体
可能已经从另一个视图转发到一个视图,此方法
对触摸位置进行必要的转换
指定视图的坐标系。
- (void)sendEvent:(UIEvent *)event
{
if([event type] == UIEventTypeTouches)
{
NSSet<UITouch *> *allTouches = [event allTouches];
if(allTouches)
{
for(UITouch* touch in allTouches)
{
if([touch type] == UITouchTypeDirect)
{
// This is 640x1136
CGRect bounds = [myWindow bounds];
// This is in [318x560] empirically
CGPoint origin = [touch locationInView:myWindow];
}
}
}
}
}
谁能解释?
来自问题:
myWindow = [[myWindow alloc] initWithFrame:[[UIScreen mainScreen] nativeBounds]];
期间用application: application didFinishLaunchingWithOptions: launchOptions
创建CAEAGLLayer
层最佳答案
每个视图都有一个contentScaleFactor属性。它旨在简化具有不同设备分辨率的工作(例如,视网膜(@ 2x),非视网膜(@ 1x),@ 3x等)UIWindow
是UIView
的子类,因此它也有。
比例因子确定视图中内容如何从
设备坐标的逻辑坐标空间(以磅为单位)
空间(以像素为单位)。该值通常为1.0或2.0。
比例因子越高,表示视图中的每个点
由底层中的一个以上像素表示。对于
例如,如果比例因子为2.0,并且视图框架大小为50 x 50
点,用于表示内容的位图大小为100 x
100像素。
此属性的默认值为关联的比例因子
当前显示视图的屏幕。如果您的自定义视图
实现一个自定义的drawRect:方法,并与一个窗口相关联,
或者,如果您使用GLKView类绘制OpenGL ES内容,则您的视图
以屏幕的完整分辨率绘制。对于系统视图,
即使在高分辨率屏幕上,此属性的值也可能是1.0。
因此,在您的情况下,[myWindow bounds]
返回的逻辑大小等于设备屏幕大小,因为您将其设置为本机边界。根据其缩放比例(等于2)从其逻辑坐标计算得出的设备坐标中,窗口的大小是屏幕的两倍,并且触摸仅触及屏幕的第四部分。
myWindow = [[myWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
myWindow.layer.contentsScale = [[UIScreen mainScreen] nativeScale];
CGPoint origin = [touch locationInView:myWindow];
origin.x *= [[UIScreen mainScreen] scale];
origin.y *= [[UIScreen mainScreen] scale];
关于ios - iOS触控座标系统,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35591681/