例如,我会显示一个笑脸,可以在整个屏幕上缩放宽高比。用户触摸笑脸的左眼。无论用户使用什么设备,我如何保证我返回的X和Y坐标都是相同的?
我一直试图弄清楚这一点,记住设备的纵横比,以及图像缩放。似乎无论我做什么,结果总是至少有点不同,具体取决于设备。
我目前正试图在iOS上解决这个问题,但我最终会为Android做同样的事情。有什么建议?包括一个可以提供帮助的pod /库很好。
答案 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)
}
}