如何根据用户对图像的触摸获得X和Y坐标,这些坐标在任何设备上都是相同的

时间:2018-06-15 20:29:35

标签: ios swift

例如,我会显示一个笑脸,可以在整个屏幕上缩放宽高比。用户触摸笑脸的左眼。无论用户使用什么设备,我如何保证我返回的X和Y坐标都是相同的?

我一直试图弄清楚这一点,记住设备的纵横比,以及图像缩放。似乎无论我做什么,结果总是至少有点不同,具体取决于设备。

我目前正试图在iOS上解决这个问题,但我最终会为Android做同样的事情。有什么建议?包括一个可以提供帮助的pod /库很好。

1 个答案:

答案 0 :(得分:0)

所以,我遇到麻烦主要是因为我在情节提要中的限制。对于下面的代码,您需要确保高度和宽度与(缩放的)图像匹配,而不与视图或屏幕尺寸匹配-因此,仅选择“宽高比”内容模式并放大图像是行不通的。我添加了一个宽高比约束,以及一些灵活的尾部和前导空格(> = 0)。无论如何,如果可以使图像的“边界”成功围绕图像的实际边界,则应该设置为使用以下代码。

此代码根据图像获取触摸的坐标,然后根据宽高比计算该触摸的X / Y值在哪里。因此,即使您的手机上有几千个像素,在200x300笑脸中位于100x150的左眼触摸也会成功返回“ X:100 Y:150”。

@IBOutlet weak var image: UIImageView!

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
    super.touchesBegan(touches, with: event)

    if let touch = touches.first {
        //based on the touch on an image, grab the X/Y value
        let imageViewPoint = touch.location(in: self.image)

        //get the ratio by dividing the scaled bounds of the image by the unscaled size of the image
        let widthRatio = image.bounds.size.width / (image.image?.size.width)!
        let heightRatio = image.bounds.size.height / (image.image?.size.height)!

        //divide the touch coordinates by the ratios to get your result
        let endResultX = imageViewPoint.x / widthRatio
        let endResultY = imageViewPoint.y / heightRatio

        print("X End Result: ", endResultX)
        print("Y End Result: ", endResultY)
    }
}