2015-06-26 2 views
0

У меня есть UIPageViewController, показывающий UIViewController, который содержит UIImageView. Изображения, отображаемые в UIImageView, первоначально поступают из рулона камеры. Я копирую их в папку приложения. Когда я отображения UIPageViewController, он загружает изображение для текущей страницы и отображает его:UIImage медленная загрузка в UIPageViewController

if let image = UIImage(contentsOfFile: imagePath) { 
    imageView.image = image 
} 

Проблема заключается в том, что это очень медленно. Загрузка первого изображения происходит медленно, а затем прокрутка выполняется очень медленно.

Я тестирую это на своем iPhone 5. Я установил приложение через XCode. Есть ли способ сделать это быстрее? Должен ли я сохранять меньшую версию изображения, когда я сохраняю изображения из рулона камеры в папку моего приложения?

ответ

0

Вы можете загрузить изображения, которые вам нужны, прежде чем перейти к UIPageViewController. Кроме того, обратите внимание на некоторые проекты для изображений кэшей FastImageCache, SDWebImage, Haneke

Кроме того, вы можете быть интерес в этой статье Avoiding Image Decompression Sickness

+0

Возможно также проверить [DFImageManager] (https://github.com/kean/DFImageManager) – kean

1

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

NSOperationQueue().addOperationWithBlock { 
     if let image = UIImage(contentsOfFile: imagePath) { 
      NSOperationQueue.mainQueue().addOperationWithBlock { 
       self.imageView.image = image 
      } 
     } 
    } 
0

Чтобы увеличить скорость считывания вам нужно двигаться, где вы назначаете изображение на UIImageView от основного потока в фоновом потоке. Есть несколько способов сделать это ...

Использование NSOperationQueue

NSOperationQueue().addOperationWithBlock { 
    if let image = UIImage(contentsOfFile: imagePath) { 
     NSOperationQueue.mainQueue().addOperationWithBlock { 
      self.imageView.image = image 
     } 
    } 
} 

Или вы можете использовать НОД и вызов dispatch_async()

if let image = UIImage(contentsOfFile: imagePath) { 
    dispatch_async(dispatch_get_main_queue()) { 
     imageView.image = image 
    } 
} 

Что касается сохранения изображения из Camera Roll когда/если вы сохраните его в своей файловой системе приложений, вы можете попробовать:

let qualityFloat = 1.0 
let imageData = UIImageJPEGRepresentation(imageFromCameraRoll, qualityFloat) 

Игра с качествомFloat (между 0.0 - 1.0) изменит размер файла изображения, который может помочь вам с временем загрузки.

Смежные вопросы