如何使用NSTextAttachment在UITextView中显示gif?

时间:2018-05-09 07:11:01

标签: ios uitextview gif nstextattachment

我使用SD_WebImage来显示我的gif,就像这样:

    UIImage *gifImg = [UIImage sd_animatedGIFWithData:[NSData dataWithContentsOfFile:imagePath]];


    NSTextAttachment *atc = [[NSTextAttachment alloc] initWithData:nil ofType:nil];

    atc.image = image;

    NSAttributedString *textAttachmentString = [NSAttributedString attributedStringWithAttachment:atc];

 [emojiText replaceCharactersInRange:range withAttributedString:textAttachmentString];

MyTextView.attributedString = emojiText;

结果: 我的UITextView上的图像显示成功,但它没有播放,只是静态

为什么?如何让这个gif-image生效?

(顺便说一句:由于某些原因我不能在我的项目中使用YYkit,所以我必须使用UITextView或UILabel) 我知道imageView可以播放带有图像数组的动画。但我没有找到在textView中显示imageView的正确方法。

帮帮我〜

1 个答案:

答案 0 :(得分:-1)

最后我解决了这个问题

我使用空附件替换我的gif-image_script

然后我找到这个附件,创建一个yyanimatedimage并将其放在我的textview

[mAttributedString enumerateAttribute:NSAttachmentAttributeName inRange:NSMakeRange(0, mAttributedString.length) options:0 usingBlock:^(id _Nullable value, NSRange range, BOOL * _Nonnull stop) {
    if ([value isKindOfClass:[NSTextAttachment class]]) {
        NSTextAttachment * attachment = value;
        if ([attachment.tagExtra isEqualToString:@"gif"]) {
            label.selectedRange = range;
            CGRect rect = [label firstRectForRange:label.selectedTextRange];
            rect.origin.y += (rect.size.height - 20);
            rect.size = CGSizeMake(20, 20);

            YYAnimatedImageView *imageView = [[YYAnimatedImageView alloc] initWithFrame:rect];
            [label addSubview:imageView];
            imageView.image = [YYImage imageNamed:attachment.tagName];
        }
    }
}];
label.selectedRange = NSMakeRange(0, 0);