快速从uiscrollview中的解析加载图像
Posted
技术标签:
【中文标题】快速从uiscrollview中的解析加载图像【英文标题】:Loading images from parse in uiscrollview in swift 【发布时间】:2015-07-11 14:59:55 【问题描述】:我想从包含多个图像的 PFFile 中检索图像,并将它们放在一个滚动视图中。到目前为止,我已经尝试了以下方法,但这会返回错误“警告:正在主线程上执行长时间运行的操作。”
let scrView = UIScrollView()
var query = PFQuery(className: "Pictures")
query.whereKey("uploader", equalTo: PFUser.currentUser()!)
query.orderByDescending("createdAt")
query.findObjectsInBackgroundWithBlock
(posts: [AnyObject]?, error: NSError?) -> Void in
if error == nil
for post in posts!
self.imageFiles.append(post["imageFile"]as! PFFile)
self.imageText.append(post["imageText"]as! String)
for var i = 0; i < self.pictNumber; ++i
var userImageFile = self.imageFiles[i]
println(userImageFile)
var imgFileData = userImageFile.getData()
var image = UIImage(data: imgFileData!)
var tempImageView = UIImageView (image: image)
tempImageView.frame = CGRectMake(CGFloat(width*i), 0, self.view.frame.width, self.view.frame.height)
scrView.addSubview(tempImageView)
我也尝试了以下方法,但它跳过了从 PFFile 中提取图像并将图像添加到滚动视图的部分。
let scrView = UIScrollView()
var query = PFQuery(className: "Pictures")
query.whereKey("uploader", equalTo: PFUser.currentUser()!)
query.orderByDescending("createdAt")
query.findObjectsInBackgroundWithBlock
(posts: [AnyObject]?, error: NSError?) -> Void in
if error == nil
for post in posts!
self.imageFiles.append(post["imageFile"]as! PFFile)
self.imageText.append(post["imageText"]as! String)
for var i = 0; i < self.pictNumber; ++i
var userImageFile = self.imageFiles[i]
println(userImageFile)
//Extracting pictures from PFFile
self.imageFiles[i].getDataInBackgroundWithBlock
(imageData: NSData?, error: NSError?) -> Void in
if imageData != nil
var image = UIImage(data: imageData!)
var tempImageView = UIImageView (image: image)
tempImageView.frame = CGRectMake(CGFloat(width*i), 0, self.view.frame.width, self.view.frame.height)
scrView.addSubview(tempImageView)
println(i)
else
println(error)
【问题讨论】:
【参考方案1】:尝试使用 userImageFile.getDataInBackgroundWithBlock() 代替 userImageFile.getData()
userImageFile.getData 在主线程中获取文件,如果文件很大或者您的网络连接速度较慢,可能会冻结您的 UI
【讨论】:
【参考方案2】:您遇到了错误:
警告:正在主服务器上执行长时间运行的操作 线程。
这意味着您必须在主线程中执行该任务,您可以使用以下代码来完成:
dispatch_async(dispatch_get_main_queue())
//add your code here
【讨论】:
感谢输入,但同样的错误继续出现。 dispatch_async(dispatch_get_main_queue()) var imgFileData = userImageFile.getData() 我把 "dispatch_async(dispatch_get_main_queue()) for var i = 0; i以上是关于快速从uiscrollview中的解析加载图像的主要内容,如果未能解决你的问题,请参考以下文章
如何在启用分页的 UIScrollView 中延迟加载 100 多个页面?