提问人:Westley 提问时间:7/2/2023 最后编辑:Westley 更新时间:7/2/2023 访问量:52
如何在小型 iPhone 上捕获点击坐标并将其渲染在大型 iPhone 上的相同相对位置?
How to capture a tap coordinate on a small iPhone and render it in the same relative position on a large iPhone?
问:
我正在构建一个应用程序,它基本上是篮球队的投篮图表。我有一个篮球场的图像,用户点击球场,就会出现一个点。我得到点击坐标并渲染一个点。很简单。
我被挂断的地方是,我最终需要将这些点击准确地呈现在手机场上的位置,这些点击在不同设备上记录了它们。因此,例如,iPad 和 iPhone 14 Pro Max 需要在罚球线上显示与录制它的 iPhone SE 相同的位置。
我尝试根据图像尺寸将 x/y 坐标转换为分数,但这不起作用,因为设备的纵横比不同。
这可能是一个简单的问题,但我被困住了!
编辑:
这是我的 VC 中的简单代码:
override func viewDidLoad() {
super.viewDidLoad()
// Add gesture recognizer
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
imageView.isUserInteractionEnabled = true
imageView.addGestureRecognizer(tapGestureRecognizer)
// I don't add this in until the second launch, after I tap and get the % below
// let dotImage = UIImageView(image: UIImage(named: "playDot"))
// dotImage.frame.origin = CGPoint(x: self.imageView.frame.size.width * 0.5007496251874063, y: self.imageView.frame.size.height * 0.20666666666666667)
// self.imageView.addSubview(dotImage)
}
@objc func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) {
let touchPoint = tapGestureRecognizer.location(in: self.imageView)
let dotImage = UIImageView(image: UIImage(named: "playDot"))
dotImage.center = touchPoint
self.imageView.addSubview(dotImage)
print("Tap dot x%:\(touchPoint.x / self.imageView.frame.size.width), y%: \(touchPoint.y / self.imageView.frame.size.height)")
}
我点击一次后,点显示如下:
这是控制台输出:
点击点 x%:0.5007496251874063, y%: 0.2066666666666667
因此,我取消了上面的初始图像放置代码的注释,并在同一模拟器上再次运行该应用程序:
我希望它在多个设备上处于完全相同的位置,但我什至无法将其正确用于同一设备:/
答: 暂无答案
评论
viewDidLoad
viewDidLayoutSubviews