2015-03-15 2 views
0

У меня есть UICollectionView, используемый для отображения изображений, которые я загружаю из файловой системы. Однако прокрутка, по-видимому, очень плохая, при прокрутке вверх и вниз она немного шаткая и негладкой, как должна - по сравнению с приложением для фотографий от Apple.Плохая производительность при прокрутке UICollectionView

Подробно: Пользователь может выбрать или сфотографировать камеру, которая затем будет сохранена в файловой системе в полном разрешении. Затем URL-адрес файла сохраняется в базе данных данных ядра.

Выполняя сегу, я попадаю на страницу обзора, где у меня есть вид коллекции. Здесь я загружаю изображение через NSURL, сохраненный в базе данных, при загрузке меняю размер изображения - от 900 кб до 45 кб. Это прекрасно работает, поэтому изображение в виде коллекции меньше 50 кб, что, на мой взгляд, не слишком много, не так ли?

Вот код:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    let width = 90 
    let height = 90 
    let theSize = CGSize(width: width, height: height) 
    return theSize 
} 

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
    let myImageCell:ImageCell = myCollectionView.dequeueReusableCellWithReuseIdentifier("imageCell", forIndexPath: indexPath) as ImageCell 

    var baseString:String = documentsDirectory() 
    var pathComponents = [baseString, self.pictures[indexPath.row]] 
    var theImageFile = NSURL.fileURLWithPathComponents(pathComponents) 

    let theNewImage = self.scaleNewImage(theImageFile)// self.scaleNewImage(readImageFileFromDirectoryNSURL(self.pictures[0])) 
    myImageCell.imageCell.image = theNewImage 

    return myImageCell 
} 

// Здесь код, чтобы изменить размер изображения

func scaleNewImage (url:NSURL) -> UIImage { 
     let src = CGImageSourceCreateWithURL(url, nil) 
     let scale = UIScreen.mainScreen().scale 
     let value = (90) * scale // self.view.bounds.width/2 
     let parameters = [ 
      kCGImageSourceShouldAllowFloat as String : true, 
      kCGImageSourceCreateThumbnailWithTransform as String : true, 
      kCGImageSourceCreateThumbnailFromImageAlways as String : true, 
      kCGImageSourceThumbnailMaxPixelSize as String : value 
     ] 
     let imageRef = CGImageSourceCreateThumbnailAtIndex(src, 0, parameters) 
     let image = UIImage(CGImage: imageRef, scale: scale, orientation: .Up)! 

     //println(image) 
     //println(image.size) 

     return image 
    } 

Было бы здорово, если бы кто-то может помочь, спасибо заранее

+2

Вы изучали кеширование изображений? – Wain

+0

Нет, я бы этого не сделал, это поможет? Я совершенно новый для быстрой/iOS, как это можно достичь? Любые примеры? - Не нужно решение, просто направление, спасибо –

+0

Направления должны быть в Google или в поле поиска вверху страницы :-) – Wain

ответ

0

использования Haneke

var theImageFile = NSURL.fileURLWithPathComponents(pathComponents) 
imageCell.hnk_setImageFromURL(theImageFile!) 

Код: http://blog.revivalx.com/2015/02/24/uicollectionview-tutorial-in-swift-using-alamofire-haneke-and-swiftyjson/

+0

Спасибо за предложение Dato, но я решил проблему с решением от Ivo. Нужно было еще немного корректировок по потоку, и теперь все работает быстро и плавно. Но я могу попробовать и ваше решение ... –

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