0

Twitter でアニメーション GIF の投稿がサポートされるようになりました。参照: https://twitter.com/Support/status/479307198901026816ただし、SLComposeViewController を使用してアニメーション GIF を Twitter に投稿しようとしましたが、gif は 1 つのフレームにフラット化されます。

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

-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 に答える