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];
答案 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]
。