是否可以异步地从url向SLComposeViewController添加图像?

时间:2013-06-02 17:30:13

标签: asynchronous ios6 uiimageview slcomposeviewcontroller

我正在开发一个应用程序,它列出了iTunes中的一些音乐曲目,我正在使用SLComposeViewController与Twitter中的专辑插图共享音轨Twitter。它现在正在工作但是当我点击分享按钮时,它需要太多时间来向我显示“推文界面”并且UI似乎已经冻结。

我认为这是因为图像加载但我不知道如何异步加载它。因为如果我理解得很好,一旦我展示了SLComposeViewController,我再也无法更新它了......

这是我正在使用的代码:

NSString *textToShare = [[self.punchlinesArray objectAtIndex:[indexPath row]] objectForKey:@"quoteContent"];
NSString *imgUrlToShare = [[self.punchlinesArray objectAtIndex:[indexPath row]] objectForKey:@"artworkURL"];
UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imgUrlToShare]]];
SLComposeViewController *tweetSheet = [SLComposeViewController
                                       composeViewControllerForServiceType:SLServiceTypeFacebook];

[tweetSheet setInitialText:textToShare];
[tweetSheet addImage:image];

干杯,

巴斯蒂安

2 个答案:

答案 0 :(得分:2)

来自class reference of the SLComposeViewController addImage方法:

  

如果图像不适合当前图像,则此方法返回NO   可用空间或如果视图控制器已经存在   向用户显示(因此无法更改)。

因此,您仍然可以异步加载图像并在操作的完成块上加载图像,设置图像并显示视图控制器。

但您可能需要查看冻结的UI是否是由于图像仍在加载,还是因为图像尺寸过大。

您可以先尝试异步加载图片并查看是否有帮助:Download an asynchronous multiple images in UITableViewView?

在加载图像时,您还可以放置活动指示符并在完成时将其删除。

否则,它可能是导致问题的图像大小,您需要考虑缩小图像以通过Twitter共享。

答案 1 :(得分:-1)

您可以在将图像添加到SLComposeViewController之前下载图像,因为当您单击共享按钮时,它首先会下载图像,这会导致显示composeView的延迟。