如何获取点在UIImageView上的点的坐标,使它们在所有设备(不同大小/分辨率)上的相同位置?

问题描述 投票:0回答:1

我之前发现过类似的问题,但没有一个得到满意的回答。我可以获得用户点击的点的坐标,但是如果在具有不同大小和分辨率的不同设备上查看相同图像,则必须恢复相同位置时出现问题。请参阅附图。我必须在用户点击imageView的任何地方放置加号图标。它基本上标记了图像的不同部分。现在,当我尝试将这些加号图标放在同一图像上但使用旧设备坐标在不同设备上时,自然不会映射确切位置。有人可以帮助我使这个标记功能通用或动态,以便可以在每个设备上复制相同的位置吗?enter image description here

ios uiimageview tags
1个回答
3
投票

我已经做了你想做的事。可以试试这个。它会帮助你。

  • 当你点击UIImageView的时候我找到了UIImageView的接触点。你需要根据UIImageViewheight计算width的百分比,所以它适用于所有设备。
//Your imageView add tapGestureRecognizer event

  imageView.isUserInteractionEnabled = true
  let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tapAction))
  self.imageView.addGestureRecognizer(tapGestureRecognizer)

 @objc func tapAction(sender: UITapGestureRecognizer) {

      let touchPoint = sender.location(in: self.imageView)
      print(touchPoint)

      var z1 = touchPoint.x
      var z2 = touchPoint.y
      print("Before Alert Touched point (\(self.z1), \(self.z2)")

      //convert point into Percentage
      let z1per =  z1 * 100 / self.imageView.frame.size.width
      let z2per =  z2 * 100 / self.imageView.frame.size.height

      print("After Alert Touched point (\(self.z1per), \(self.z2per)")


  //whatever you want to add like button or image on tap action.

    let btn = UIButton(frame: CGRect(x: touchPoint.x - 15, y: touchPoint.y - 15, width: 30, height: 30))
    btn.layer.cornerRadius = 15
    btn image = UIImage(named: "marker.png") as UIImage?
    btn.setImage(image, for: .normal)
    self.imageView.addSubview(btn)
}
© www.soinside.com 2019 - 2024. All rights reserved.