2016-07-27 4 views
2

У меня есть этот код, который я использую в коллекцииView для получения изображения.Изображение PHAsset отображается в пикселях при показе его в CollectionView

  // Code in CollectionView's cellForItemAtIndex 

      // Image 

       PHImageManager.defaultManager().getPhoto(asset, size: cell.thumbnail.frame.size) { (image) in 

        if let properImage = image 
        { 
         dispatch_async(dispatch_get_main_queue(), { 
          cell.thumbnail.image = properImage 
         }) 
        } 
        else 
        { 
         cell.thumbnail.image = UIImage() 
        } 
       } 

И getPhoto Метод.

//MARK: PHImageManager 

extension PHImageManager 
{ 
    func getPhoto(asset : PHAsset, size : CGSize, completion : (image : UIImage?) ->()) 
    { 
     let options = PHImageRequestOptions() 
     options.networkAccessAllowed = true 
     options.synchronous = false 
     options.resizeMode = PHImageRequestOptionsResizeMode.Exact 
     options.deliveryMode = PHImageRequestOptionsDeliveryMode.HighQualityFormat 

     _ = self.requestImageForAsset(asset, targetSize: size, contentMode: PHImageContentMode.AspectFit, options: options, resultHandler: { 

      result , _ in 

      if let resultValue = result as UIImage? 
      { 
       completion(image: resultValue) 
      } 
      else 
      { 
       completion(image: nil) 
      } 
     }) 
    } 
} 

Всякий раз, когда я загружаю изображения в collectionView, я вижу, что изображения видимой ячейки пикселируются. Когда я просматриваю изображения, они выглядели правильно с изображением высокого качества.

Также я пробовал все комбинации resizeMode и deliveryMode, не помог мне. Я попытался включить synchronous.

Я хочу показать hight quality images in the first time. Я не хочу прокручивать collectionView, чтобы получить его.

Есть ли способ решить это? Заранее спасибо.

ответ

0

Вы должны масштабировать размер изображения в зависимости от масштаба экрана, как это:

let retinaMultiplier = UIScreen.main.scale let size = CGSize(width:self.bounds.size.width * retinaMultiplier, height: self.bounds.size.height * retinaMultiplier)

и передать этот размер в targetSize вашего метода requestImageForAsset.

И убедитесь, что вы выбрали правильные параметры для извлечения активов.