【发布时间】:2014-12-17 03:40:12
【问题描述】:
我目前正在使用 Alamofire 从服务器获取 Json 数据/url-images。
一切正常,我可以将服务器中的所有 url-images 加载到 UIImageView 中。然后,用户可以从左向右滑动,以便像查看照片库一样查看每个图像。
目前,当我获取数据时,我会遍历我的 NSArray,将每个 url 转换为图像,然后将每个图像附加到 UIImage[]。
循环通过 NSArray 确实会在我的应用程序第一次启动时减慢它的速度,有没有办法加快这个过程?还是一种更好/更快的方式将网址转换为后台图像?
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)!)
}
}
}
【问题讨论】:
-
如果分析你的项目,我想你会发现
var imgData: NSData = NSData(contentsOfURL: imgURL)!是真正花费最多时间的地方。我也不认为有任何解决办法。获取图像是一项繁重的任务。 -
确保您的图像获取/解码是在主线程之外完成的。您还必须设计您的应用程序以处理由于仍在下载图像而导致图像不可用的任何时间
-
你也可以延迟获取你的图片。例如,获取前 3 张图像(图像 0、图像 1 和图像 n),然后每次用户滑动时,获取下一张图像(如果他们向右滑动,则为图像 2,如果向左滑动,则为图像 n-1)
-
@Paulw11 我喜欢你的想法,你有代码示例吗?我对 iOS 很陌生。
-
使用像 SDWebImage 这样的东西可能是最简单的github.com/rs/SDWebImage
标签: ios json swift uiimage alamofire