【问题标题】:Post animated gif on Twitter with SLComposeViewController使用 SLComposeViewController 在 Twitter 上发布动画 gif
【发布时间】:2014-09-12 11:23:58
【问题描述】:

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

【问题讨论】:

  • 您是否尝试过+(UIImage *)animatedImageWithImages:(NSArray *)images duration:(NSTimeInterval)duration 来创建您的UIImage

标签: ios twitter gif slcomposeviewcontroller


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

也许您可以尝试从各个框架创建您的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].

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2015-03-19
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多