2016-04-15 158 views
1

我无法通过编程方式将图像分配到UIImageView后获取图像的大小。在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 

,我理解为在另一个职位的解决方案,但他只是返回屏幕尺寸的设备(667对iPhone6模拟器)尝试。

任何人都可以指导我如何获得正确的图像大小? 谢谢

+2

一个UIImage有一个'size'属性。你尝试过使用它吗?图像视图的大小应该是您设置的大小(=屏幕边界)。下载图像后,获取其大小(使用'image.size')并使用它 – lostInTransit

回答

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) 
0

尝试使用myImage.image.size.height并确保图像从你应该把它写在完成块且仅当图像被下载检查该网址下载。 查看documentation了解更多详情。

2

由于您的imageView占据了整个屏幕,图像的大小使用“宽高比适合”来获得图像显示的高度,您将需要使用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 official doc

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 
    } 
)