• locationInView:返回给定视图的坐标系统中接收器的当前位置。


  • 此方法返回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];
                        }
                    }
                }
            }
        }
    

    谁能解释?

    来自问题:
  • 在物理iPhone 6设备上进行测试。
  • myWindow是应用程序的主窗口。在myWindow = [[myWindow alloc] initWithFrame:[[UIScreen mainScreen] nativeBounds]];期间用application: application didFinishLaunchingWithOptions: launchOptions创建
  • myWindow没有子视图。只有一个CAEAGLLayer
  • 最佳答案

    每个视图都有一个contentScaleFactor属性。它旨在简化具有不同设备分辨率的工作(例如,视网膜(@ 2x),非视网膜(@ 1x),@ 3x等)UIWindowUIView的子类,因此它也有。

    比例因子确定视图中内容如何从
    设备坐标的逻辑坐标空间(以磅为单位)
    空间(以像素为单位)。该值通常为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/

    10-09 09:58