快速从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 和性能

UIscrollView 快速分页和缩放图像

如何在启用分页的 UIScrollView 中延迟加载 100 多个页面?

使用 SQLite 中的数据在 UIScrollView 中延迟加载

uiscrollview 中的图像显示

UIScrollVIew 中的 UIView 不更新视图