0

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];
4

2 回答 2

2

您可以使用,一种通过Twitter API本身SLRequest访问 API 的较低级别的方式来完成此操作。

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

于 2014-07-21T20:24:59.017 回答
-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].

于 2014-07-21T20:45:28.353 回答