Как я могу показать GIF в UITextView с NSTextAttachment? - PullRequest
0 голосов
/ 09 мая 2018

Я использовал 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-изображение активным?

(кстати: по некоторым причинам я не могу использовать YYkit в своем проекте, поэтому я должен использовать UITextView или UILabel) Я знаю, что imageView может воспроизводить анимацию с массивом изображений. Но я не могу найти правильный способ показать изображение в textView.

Помоги мне ~ ?

1 Ответ

0 голосов
/ 09 мая 2018

наконец я решил три проблемы

я использую пустое вложение вместо моего gif-image_script

затем я нахожу это вложение, создаю yyanimatedimage и помещаю его в мое текстовое представление

[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);
...