图片下载会减慢 UIActivityViewController 的出现时间

Posted

技术标签:

【中文标题】图片下载会减慢 UIActivityViewController 的出现时间【英文标题】:Image download slows UIActivityViewController appearance time 【发布时间】:2015-08-06 20:40:35 【问题描述】:

我在UITableViewCell 操作中有一个分享按钮,它会拉出UIActivityViewController。这工作得很好,除了我从 Parse 加载图像,并且由于图像的分辨率相当高,可以使 UIActivityViewController 缓慢出现。我在导航栏中添加了UIActivityIndicator,以通知用户正在加载某些内容,但这仍然不是最佳的用户体验。

我想知道是否有办法让UIActivityViewController 立即出现,同时在后台加载图像,以便在加载时将其添加到共享中?或者有没有办法在用户滑动UITableViewCell时立即开始加载图像?

如果有人有任何其他建议,那么他们将不胜感激!

谢谢!

编辑:

这是我的代码:

    let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
        dispatch_async(dispatch_get_global_queue(priority, 0)) 
            let imageURL = NSURL(string: DataManager.sharedInstance.getRideByName(cell.rideNameLabel.text!)!.rideImage!)
            let imageData = NSData(contentsOfURL: imageURL!)

            dispatch_async(dispatch_get_main_queue()) 
                let image = UIImage(data: imageData!)
                let text = "I've just been to '\(cell.rideNameLabel.text!)' at \(self.parkPassed.name!)!"
                let appURL = NSURL(string: "http://itunes.apple.com/app/1021402097")

                let objectsToShare = [text, image!, appURL!]
                let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
                activityVC.excludedActivityTypes = [UIActivityTypeAddToReadingList, UIActivityTypeAssignToContact, UIActivityTypeCopyToPasteboard, UIActivityTypePostToFlickr, UIActivityTypePostToTencentWeibo, UIActivityTypePostToVimeo, UIActivityTypePostToWeibo, UIActivityTypePrint, UIActivityTypeSaveToCameraRoll]

                self.presentViewController(activityVC, animated: true, completion: nil)

                self.navigationItem.titleView = nil
            
        

【问题讨论】:

【参考方案1】:

您可以使用 Parse 的 PFImageView,它使用本地存储的占位符图像。所以视图将立即加载,一旦你的控制器完成初始化,你可以告诉 Parse 在后台加载图像,它应该为你做剩下的事情。

PFImageView *creature = [[PFImageView alloc] init];
creature.image = [UIImage imageNamed:@”1.jpg”]; // placeholder image
creature.file = (PFFile *)file;
[creature loadInBackground];

查看link了解更多详情。

编辑

此外,几乎每个 Parse 操作都在后台下载完成块版本。您可以在后台下载图片并在完成块中设置图片。

我在您的代码中没有看到任何 Parse 引用,但它看起来可能在您的 DataManager 中。看起来你正在做的是首先在后台下载数据,然后在完成后呈现 UIActivityViewController。

我要做的是创建一个自定义 UIActivityViewController,您可以使用相同的方式使用它,只是将 image 设置为占位符图像并创建一个自定义属性来保存您希望的图像 URL装载。然后在自定义 UIActivityViewController 的 onViewDidAppear 中,您可以启动 PFQuery 或其他一些异步任务以在后台下载图像数据,完成后您可以加载真实图像并关闭您可能显示的任何 UIActivityIndi​​ctators。

PFQuery *query = [PFQuery queryWithClassName:@"myImages"];
[query whereKey:@"imageName" equalTo:@"your_image.jpg"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) 
  if (!error) 
    // The find succeeded.
    NSLog(@"Successfully retrieved %d images.", objects.count);
    // Do something with the found objects
    for (PFObject *object in objects) 
        NSLog(@"%@", object.objectId);
    
   else 
    // Log details of the failure
    NSLog(@"Error: %@ %@", error, [error userInfo]);
  
];

有关使用 PFQuery 下载图像的更多详细信息,请参阅question。

【讨论】:

但是如何使用带有UIActivityViewController 的PFImageView? UIActivityViewController 仍然只是一个视图控制器。您可以像使用 UIImageView 一样使用 PFImageView。也许如果您向我展示设置图像的代码,我可以提供更多帮助。

以上是关于图片下载会减慢 UIActivityViewController 的出现时间的主要内容,如果未能解决你的问题,请参考以下文章

与分页相关的哪些 LINQ 操作可能会减慢我的查询速度?

为啥程序背景会减慢 UIScrollView?

非聚集索引会减慢插入速度吗?

为啥有些列会减慢查询速度

额外的空间会减慢处理器的速度吗?

为啥固定元素会减慢 Firefox 中的滚动速度?