当我们使用scaleAspectFill在UIImageView中设置UIImage时,我想获得UIImage的原始x和y位置。

如我们在scaleAspectFill中所知,部分被裁剪。因此,根据我的要求,我想获得x和y值(可能是-我不知道的值)。

这是画廊的原始图像

ios - 如何获取UIImage在UIImageView中的x和y位置?-LMLPHP

现在,我将此上方图片设置为我的应用视图。

ios - 如何获取UIImage在UIImageView中的x和y位置?-LMLPHP

因此,在上述情况下,我想获取被裁剪的图像的隐藏的x,y位置。

谁能告诉我如何获得它?

最佳答案

使用以下扩展名

extension UIImageView {

    var imageRect: CGRect {
        guard let imageSize = self.image?.size else { return self.frame }

        let scale = UIScreen.main.scale

        let imageWidth = (imageSize.width / scale).rounded()
        let frameWidth = self.frame.width.rounded()

        let imageHeight = (imageSize.height / scale).rounded()
        let frameHeight = self.frame.height.rounded()

        let ratio = max(frameWidth / imageWidth, frameHeight / imageHeight)
        let newSize = CGSize(width: imageWidth * ratio, height: imageHeight * ratio)
        let newOrigin = CGPoint(x: self.center.x - (newSize.width / 2), y: self.center.y - (newSize.height / 2))
        return CGRect(origin: newOrigin, size: newSize)
    }

}

用法
let rect = imageView.imageRect
print(rect)

UI测试
let testView = UIView(frame: rect)
testView.backgroundColor = UIColor.red.withAlphaComponent(0.5)
imageView.superview?.addSubview(testView)

关于ios - 如何获取UIImage在UIImageView中的x和y位置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56216119/

10-13 06:34