如何在iOS中分享gif动画图像

时间:2014-10-29 06:24:57

标签: ios

我不知道如何使用UIActivityViewController分享动画.gif图片。请帮我解决这个问题。提前谢谢

see this image .i am displaying this type of images and to share these images I am using uiactivity view but it is not animating .it's just displaying image 



if(imgFrameCount==1)

    {
        imgFrameCount++;
        NSURL *url1=[[NSBundle mainBundle]URLForResource:@"animated2" withExtension:@"gif"];
        self.firstImage=[UIImage animatedImageWithAnimatedGIFData:[NSData dataWithContentsOfURL:url1]];
        self.frameImage.image = self.firstImage;
    }
else if (imgFrameCount==2)
{
    imgFrameCount++;
    NSURL *url2=[[NSBundle mainBundle]URLForResource:@"animated3" withExtension:@"gif"];
    self.firstImage=[UIImage animatedImageWithAnimatedGIFData:[NSData dataWithContentsOfURL:url2]];
    self.frameImage.image = self.firstImage;
}

4 个答案:

答案 0 :(得分:7)

FWIW,我在尝试在ActivityItems数组中包含UIImage时遇到了同样的问题。它不适用于通用的UIImage,也不适用于使用UIImage + animagedGIF类别的UIImage,也不适用于FLAnimatedImage。

要解决此问题,至少在iOS8上,只需将gif作为NSData对象而不是UIImage添加到ActivityItems数组中。

例如,假设从URL请求gif:

NSURL *imagePath = [NSURL URLWithString:@"http://i.imgur.com/X4oonnm.gif"];
NSData *animatedGif = [NSData dataWithContentsOfURL:imagePath];
NSArray *sharingItems = [NSArray arrayWithObjects: animatedGif, nil];

UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:sharingItems applicationActivities:nil];

答案 1 :(得分:2)

这是一个棘手的问题,因为不同的共享接收器以不同的方式处理数据。因此,在分享给几个不同的应用程序时,其他答案中提到的NSData解决方案确实有效,但对大多数应用程序而言并非如此看起来接收器需要足够聪明才能解码字节数组,并确定它确实是一个GIF动画,但大多数人都不这样做。一个更好的计划似乎是发送具有适当扩展名的文件引用,因为大多数应用程序将识别文件扩展名。因此,我目前的策略来自https://stackoverflow.com/a/13028336/158770,但写入名为" share.gif"的文件。或类似的。当以这种方式共享几乎所有可以处理动画gif的应用程序时,设法正确接收它。

答案 2 :(得分:1)

尝试使用此代码。

NSArray *animeImages = [NSArray arrayWithObjects:
                                    [UIImage imageNamed:@"tmp-0.png"],
                                    [UIImage imageNamed:@"tmp-1.png"],
                                    [UIImage imageNamed:@"tmp-2.png"],
                                    [UIImage imageNamed:@"tmp-3.png"],
                                    [UIImage imageNamed:@"tmp-4.png"],
                                    [UIImage imageNamed:@"tmp-5.png"],
                                    [UIImage imageNamed:@"tmp-6.png"],
                                    [UIImage imageNamed:@"tmp-7.png"],
                                    [UIImage imageNamed:@"tmp-8.png"],
                                    [UIImage imageNamed:@"tmp-9.png"],
                                    [UIImage imageNamed:@"tmp-10.png"],
                                    [UIImage imageNamed:@"tmp-11.png"],
                                    nil];
imageView.image = [UIImage animatedImageWithImages:animeImages duration:2.0];

您现在可以使用此imageView并设置其各种属性,如框架和隐藏等,使其像活动指示器一样工作。在数组中传递的图像是动画gif的细分。可以使用this one等任何在线工具轻松完成。

答案 3 :(得分:0)

这应该这样做。扩展Jordan Bonitatis的回答。诀窍是创建一个NSData对象,其内容为NSURL

- (void)share
{
  NSURL *imageURL = [NSURL URLWithString:@"http://...url..of..gif];
  NSData *imageData = [NSData dataWithContentsOfURL:imageURL];
  NSArray *objectsToShare = @[imageData];

  UIActivityViewController *activityVC = [[UIActivityViewController alloc] initWithActivityItems:objectsToShare applicationActivities:nil];

  NSArray *excludeActivities = @[UIActivityTypeAirDrop,
                                 UIActivityTypePrint,
                                 UIActivityTypePostToVimeo];

  activityVC.excludedActivityTypes = excludeActivities;

  [self presentViewController:activityVC animated:YES completion:nil];
}