проблема при сбрасывании булавки к изображению на разных устройствах - PullRequest
1 голос
/ 18 октября 2019

Я сбрасываю изображение булавки на изображении с координатами, поэтому пин-код установлен правильно, но есть небольшое различие в положении на разных устройствах. Я делюсь своим кодом ниже

func convertTapToImg(_ point: CGPoint) -> CGPoint? {
    let xRatio = imgView.frame.width / (img?.size.width)!
    let yRatio = imgView.frame.height / (img?.size.height)!
    let ratio = min(xRatio, yRatio)

    let imgWidth = (img?.size.width)! * ratio
    let imgHeight = (img?.size.height)! * ratio

    var tap = point
    var borderWidth: CGFloat = 0
    var borderHeight: CGFloat = 0
    // detect border
    if ratio == yRatio {
        // border is left and right
        borderWidth = (imgView.frame.size.width - imgWidth) / 2
        if point.x < borderWidth || point.x > borderWidth + imgWidth {
            return nil
        }
        tap.x -= borderWidth
    } else {
        // border is top and bottom
        borderHeight = (imgView.frame.size.height - imgHeight) / 2
        if point.y < borderHeight || point.y > borderHeight + imgHeight {
            return nil
        }
        tap.y -= borderHeight
    }

    let xScale = tap.x / (imgView.frame.width - 2 * borderWidth)
    let yScale = tap.y / (imgView.frame.height - 2 * borderHeight)
    let pixelX = (img?.size.width)! * xScale
    let pixelY = (img?.size.height)! * yScale
    return CGPoint(x: pixelX, y: pixelY)
}

, затем с помощью жеста касания я получил один xyкоординаты, как показано ниже

@objc func tapGesture(_ gesture: UITapGestureRecognizer) {
      let point = gesture.location(in: imgView)
      let imgPoint = convertTapToImg(point)
      print("tap: \(point) -> img \(imgPoint)")
}

, затем после того, как я установил контакт, как показано ниже, с координатами

var xCo = 83.0
var yCo = 404.0

let imageView = UIImageView()
imageView.image = #imageLiteral(resourceName: "ic_Pin")
imageView.frame = CGRect(x: xCo - 20, y: yCo - 20, width: 22, height: 22)
imgView.addSubview(imageView)

, теперь я делюсь снимком экрана с выводами различных устройств, есть лишь небольшая разница с положением контакта

Это снимок экрана iPhone 5s

Это снимок экрана iPhone 6

Это экран iPhone XRСнимок

Пожалуйста, проверьте снимок экрана и, пожалуйста, помогите, как установить одинаковое положение выводов на всех устройствах

...