2016-04-15 4 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).

Может ли кто-нибудь вести меня, как я могу получить правильный размер изображения? Thanks

+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, а также убедитесь, что изображение загружается из URL, вы должны написать его в блоке завершения и только проверить, является ли изображение загружается. Для получения более подробной информации см. documentation.

2

Поскольку ваше изображениеView занимает весь экран, а изображение имеет размер, используя «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 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 
    } 
) 
Смежные вопросы