В настоящее время я использую Alamofire для получения данных/url-изображений Fetch с сервера.loop and append json data в UIImage [] в Background Swift
Все работает нормально, и я могу загрузить все URL-изображения с сервера в UIImageView. Затем пользователь может прокручивать слева направо, чтобы просмотреть каждое изображение, как в фотогалерее.
В настоящее время, когда я беру данные, я прохожу через свой NSArray, конвертирую каждый url, чтобы стать имиджем, а затем добавьте каждое изображение в UIImage [].
Цитирование через NSArray действительно замедляет мое приложение, когда оно начинается, есть ли способ ускорить этот процесс? Или лучший/более быстрый способ скрывать URL-адреса в образах в фоновом режиме?
var pages = NSArray()
var mutable_pages = NSMutableArray()
var pageImages: [UIImage] = []
override func viewDidLoad() {
super.viewDidLoad()
self.fetchPages()
}
func fetchPages() {
Alamofire.request(.GET, "http://www.myurl.com/api/pages.json").responseJSON() {
(_, _, data, _) in
self.pages = data!.valueForKey("page_url") as NSArray!
self.mutable_pages = NSMutableArray(array: self.pages)
###THIS IS REALLY SLOW, IS THERE A FASTER SOLUTION
for var i = 0; i < self.mutable_pages.count; i++ {
###Construct the imgUrl to get an image URL for the pages
let urlString: NSString = self.mutable_pages[i] as NSString
var imgURL: NSURL = NSURL(string: urlString)!
var imgData: NSData = NSData(contentsOfURL: imgURL)!
###append each image into UIImage
self.pageImages.append(UIImage(data: imgData)!)
}
}
}
Если профиль проекта, я думаю, вы обнаружите, что 'уаг imgData : NSData = NSData (contentsOfURL: imgURL)! '- это то, что действительно занимает больше всего времени. Я также не думаю, что это происходит; выборка изображений является интенсивной задачей. – 68cherries
Убедитесь, что выборка/декодирование изображений выполняется с основного потока. Вы также должны будете проектировать свое приложение, чтобы обрабатывать любое время, когда изображения недоступны, так как они все еще загружаются. – nielsbot
Вы также можете ленить фотографии. Извлеките, скажем, первые 3 изображения (изображение 0, изображение 1 и изображение n), а затем каждый раз, когда пользователь выполняет поиск, выберите следующее изображение (изображение 2, если они проведите по экрану вправо, изображение n-1, если они проведите влево) – Paulw11