ios - UIImageView 获取显示图像的位置

标签 ios objective-c uiimageview uiimage

我有一个显示 UIImage 的 UIImageView。

UIImage可能会变成其他不同大小的UIImage,UIImage里面的位置和大小会随之改变。

我的问题是我正在尝试添加一个将位于 UIImage 末尾的 View (它一直在变化),而我所能得到的只是 UIImageView 的框架(它一直保持全屏) .

如何获取当前显示的 UIImage 的“框架”?

最佳答案

swift 4.2 和 5.0

func calculateRectOfImageInImageView(imageView: UIImageView) -> CGRect {
        let imageViewSize = imageView.frame.size
        let imgSize = imageView.image?.size

        guard let imageSize = imgSize else {
            return CGRect.zero
        }

        let scaleWidth = imageViewSize.width / imageSize.width
        let scaleHeight = imageViewSize.height / imageSize.height
        let aspect = fmin(scaleWidth, scaleHeight)

        var imageRect = CGRect(x: 0, y: 0, width: imageSize.width * aspect, height: imageSize.height * aspect)
        // Center image
        imageRect.origin.x = (imageViewSize.width - imageRect.size.width) / 2
        imageRect.origin.y = (imageViewSize.height - imageRect.size.height) / 2

        // Add imageView offset
        imageRect.origin.x += imageView.frame.origin.x
        imageRect.origin.y += imageView.frame.origin.y

        return imageRect
    }

swift 3.0

// MARK: - Create Rect
func calculateRectOfImageInImageView(imageView: UIImageView) -> CGRect {
    let imageViewSize = imageView.frame.size
    let imgSize = imageView.image?.size

    guard let imageSize = imgSize, imgSize != nil else {
        return CGRect.zero
    }

    let scaleWidth = imageViewSize.width / imageSize.width
    let scaleHeight = imageViewSize.height / imageSize.height
    let aspect = fmin(scaleWidth, scaleHeight)

    var imageRect = CGRect(x: 0, y: 0, width: imageSize.width * aspect, height: imageSize.height * aspect)
    // Center image
    imageRect.origin.x = (imageViewSize.width - imageRect.size.width) / 2
    imageRect.origin.y = (imageViewSize.height - imageRect.size.height) / 2

    // Add imageView offset
    imageRect.origin.x += imageView.frame.origin.x
    imageRect.origin.y += imageView.frame.origin.y

    return imageRect
}

对于 Swift < 3.0

这是 Swift 中的上述方法。同样,假设 contentMode 设置为 .ScaleAspectFit 如果给定的 imageView 上没有图像,CGRectZero 将返回。

func calculateRectOfImageInImageView(imageView: UIImageView) -> CGRect {
    let imageViewSize = imageView.frame.size
    let imgSize = imageView.image?.size

    guard let imageSize = imgSize where imgSize != nil else {
        return CGRectZero
    }

    let scaleWidth = imageViewSize.width / imageSize.width
    let scaleHeight = imageViewSize.height / imageSize.height
    let aspect = fmin(scaleWidth, scaleHeight)

    var imageRect = CGRect(x: 0, y: 0, width: imageSize.width * aspect, height: imageSize.height * aspect)
    // Center image 
    imageRect.origin.x = (imageViewSize.width - imageRect.size.width) / 2
    imageRect.origin.y = (imageViewSize.height - imageRect.size.height) / 2

    // Add imageView offset
    imageRect.origin.x += imageView.frame.origin.x
    imageRect.origin.y += imageView.frame.origin.y

    return imageRect
}

关于ios - UIImageView 获取显示图像的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26348736/

相关文章:

objective-c - NSScrollView滚动不滚动?

iphone - UIImageView 不一致地变黑

ios - UIImageView -> UIScrollview,裁剪和裁剪 ScrollView 坐标

iphone - 在 xCode 中加速编译

ios - 如何在 Google MapView iOS 中设置固定标记位置

objective-c - 数组按日期排序但未按时间排序

objective-c - 获取 NSMatrix 内的导出

ios - UIImage 和 prepareforSegue 无法传递图像

ios - 快速转换使用 uibezierpath 创建的线

iphone - iOS:安装应用程序时的通知(但尚未运行)