使用SLComposeViewController在Twitter上发布动画gif

时间:2014-07-21 20:13:07

标签: ios twitter gif slcomposeviewcontroller

Twitter现在支持发布GIF动画。请参阅:https://twitter.com/Support/status/479307198901026816但是我一直在尝试使用SLComposeViewController将动画gif发布到twitter,但是gif会变平为一帧。

NSData *data = [NSData dataWithContentsOfFile:self.filepath];    
UIImage *gif = [UIImage imageWithData:data];

SLComposeViewController *sheet = [SLComposeViewController composeViewControllerForServiceType:serviceType];
[sheet setInitialText:[NSString stringWithFormat:@"Just created a Gif"]];
[sheet addImage:gif];
[self presentViewController:sheet animated:YES completion:nil];

2 个答案:

答案 0 :(得分:2)

您可以使用SLRequest,一种通过Twitter API本身访问API的低级方式来实现此目的。

如果你想使用SLComposeViewController,你将不得不等到Apple实现对动画GIF的支持 - 这可能不是你能在代码中修复的东西。

答案 1 :(得分:-1)

也许您可以尝试从各个框架创建UIImage,因为UIImage通过+(UIImage *)animatedImageWithImages:(NSArray *)images duration:(NSTimeInterval)duration支持此功能。

要从NSData获取帧,您可以执行此操作,但首先请确保import <ImageIO/ImageIO.h>并将二进制文件链接到该框架。

NSData *data = [NSData dataWithContentsOfFile:self.filepath];

NSMutableArray *frames = nil;
CGImageSourceRef sourceRef = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);
if (sourceRef) {
     size_t frameCount = CGImageSourceGetCount(sourceRef);
     frames = [NSMutableArray arrayWithCapacity:frameCount];
     for (size_t i = 0; i < frameCount; i++) {
         CGImageRef image = CGImageSourceCreateImageAtIndex(sourceRef, i, NULL);
         if (image) {
             [frames addObject:[UIImage imageWithCGImage:image]];
             CGImageRelease(image);
         }   
     }   
     CFRelease(sourceRef);
}

然后,在拥有框架后,您可以创建一个动画UIImage,如下所示:

UIImage *animatedImage = [UIImage animatedImageWithImages:frames
                                   duration: frames.count / 30.0];

请注意,假设您的gif以每秒30帧的速度播放。您可以通过将30更改为所需的帧速率来更改此设置。现在你应该能够像这样发帖:

[sheet addImage:animatedImage]