图像下载会降低UIActivityViewController的出现时间

时间:2015-08-06 20:40:36

标签: ios swift uitableview uiactivityviewcontroller

我在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 个答案:

答案 0 :(得分: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