Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 图像下载会减慢UIActivityViewController的显示时间_Ios_Swift_Uitableview_Uiactivityviewcontroller - Fatal编程技术网

Ios 图像下载会减慢UIActivityViewController的显示时间

Ios 图像下载会减慢UIActivityViewController的显示时间,ios,swift,uitableview,uiactivityviewcontroller,Ios,Swift,Uitableview,Uiactivityviewcontroller,我在一个UITableViewCell操作中有一个共享按钮,它会调出一个UIActivityViewController。除了我正在从Parse加载一个图像这一事实之外,这工作非常好,而且图像的分辨率相当高,这会使UIActivityViewController的显示速度变慢。我在导航栏中添加了一个UIActivityIndicator,通知用户正在加载某个内容,但这仍然不是最好的用户体验 我想知道是否有什么方法可以让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
            }
        }

您可以使用Parse的PFImageView,它使用本地存储的占位符图像。因此,视图将立即加载,一旦控制器完成初始化,您可以告诉Parse在后台加载图像,它将为您完成其余的工作

PFImageView *creature = [[PFImageView alloc] init];
creature.image = [UIImage imageNamed:@”1.jpg”]; // placeholder image
creature.file = (PFFile *)file;
[creature loadInBackground];
有关更多详细信息,请参见此

编辑

此外,几乎每一个解析操作都有一个后台下载和完成块版本。您可以在后台下载图像,并在完成块中设置图像

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

相反,我要做的是创建一个自定义UIActivityViewController,除了将图像设置为占位符图像并创建一个自定义属性来保存要加载的图像URL之外,您可以使用相同的方法使用它。然后,在自定义UIActivityViewController的OnViewDid中,您可以启动PFQuery或其他异步任务,在后台下载图像数据,完成后,您可以加载真实图像并关闭可能显示的任何UIActivityIndicators

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下载图像的更多详细信息,请参见本节。

但是如何将PFImageView与
UIActivityViewController
一起使用?UIActivityViewController仍然只是一个视图控制器。使用PFImageView的方式与使用UIImageView的方式相同。也许如果你给我看你设置图像的代码,我能帮上更多的忙。