在UIImageView中获取图片的尺寸

3

我在使用编程方式将图片分配给UIImageView后,无法获取其大小。

以下代码在循环中运行,使用一个函数(getNoteImage)从URL(photoURL)下载图像并将其分配给创建的UIImageView。我需要获取图像的高度,以便计算接下来的图像和标签之间的空格距离。

        var myImage :UIImageView

        myImage = UIImageView(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height))

        myImage.center = CGPointMake(UIScreen.mainScreen().bounds.size.width/2, imageY)

        myImage.getNoteImage(photoUrl)

        self.detailsView.addSubview(myImage)

        myImage.contentMode = UIViewContentMode.ScaleAspectFit

        imageHeight = myImage.bounds.size.height

我尝试使用

imageHeight = myImage.bounds.size.height

我在另一篇文章中看到了一个解决方案,但它只返回设备的屏幕大小(在iPhone6模拟器上为667)。

有没有人能指导我如何获取正确的图像大小? 谢谢。


2
UIImage有一个size属性。你试过使用它吗?图像视图的大小将是您设置的大小(=屏幕边界)。一旦图像被下载,获取其大小(使用image.size)并使用它。 - lostInTransit
4个回答

8

由于您的imageView占据了整个屏幕,且使用“aspect fit”来调整图像大小以获取显示高度,因此您需要使用myImage.image!.size来获取原始图像大小,然后基于myImage.bounds.size 进行比例缩放,例如:

let imageViewHeight = myImage.bounds.height
let imageViewWidth = myImage.bounds.width
let imageSize = myImage.image!.size
let scaledImageHeight = min(imageSize.height * (imageViewWidth / imageSize.width), imageViewHeight)

这应该会给出图像的实际高度,注意image.size给出的是图像的“逻辑尺寸”,即其自然大小,而不是绘制时的大小。


1
根据UIImage官方文档的说明:
if let image = myImage.image {
       let size = image.size
       print("image size is \(size)")
} else { 
    print("There is no image here..")
}

我假设您的代码是使用同步图像,就像我在您的问题中理解的那样,但如果不是这样,我建议使用AlamofireImage。

使用AlamofireImage,您可以进行以下操作:

self.myImage.af_setImageWithURL(
    NSURL(string: photoUrl)!,
    placeholderImage: nil,
    filter: nil,
    imageTransition: .CrossDissolve(0.5),
    completion: { response in
        print(response.result.value) # UIImage  
        if let image = response.result.value {
           let size = image.size
           print("image size is \(size)")
        }
        print(response.result.error) # NSError
    }
)

0
尝试使用myImage.image.size.height,并确保图像是从URL下载的。您应该将其写在完成块中,并仅在图像下载后检查。有关更多详细信息,请参见文档

0

将您的代码更改为以下内容,然后再试一次。只有在您强制设置UIImageView的框架并给它一个图像之后,您才能使用"imageHeight = myImage.bounds.size.height"获取图像的实际大小。

    var myImage :UIImageView
    //remove your initial frame parameters
    myImage = UIImageView()
    myImage.center = CGPointMake(UIScreen.mainScreen().bounds.size.width/2, imageY)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接