NSTextAttachment с текстом, обтекающим его

У меня есть редактор на основе TextKit с поддержкой добавления изображений. Я хочу показать каждое изображение в отдельных строках.

Мой код выглядит так (спасибо TextEdit), в моем подклассе NSTextStorage

- (void)addImageAssets:(NSArray *)allAssets atRange:(NSRange)range;
{

    NSMutableAttributedString *attachments = [NSMutableAttributedString new];

    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle.alignment = NSTextAlignmentCenter;
    paragraphStyle.lineSpacing = 20.0f;

    for (ALAsset *newAsset in allAssets)
    {
        UIImage *theImage = [UIImage imageWithCGImage:newAsset.aspectRatioThumbnail];

        NSTextAttachment *textAttachment = [NSTextAttachment new];
        textAttachment.image = theImage;

        NSMutableAttributedString *replacementString = [NSMutableAttributedString new];
        [replacementString appendAttributedString:[NSAttributedString attributedStringWithAttachment:textAttachment]];
        [replacementString addAttribute:NSParagraphStyleAttributeName
                                  value:paragraphStyle
                                  range:NSMakeRange(0, [replacementString length])];

        [attachments appendAttributedString:replacementString];
    }

    _isEditing = YES;
    [self beginEditing];

    [_backingStore replaceCharactersInRange:range
                       withAttributedString:attachments];

    [self edited:NSTextStorageEditedAttributes
           range:range changeInLength:allAssets.count];
    [super processEditing];


    [self endEditing];
    _isEditing = NO;
}

(_isEditing - логический флаг, используемый для учета)

Вывод выглядит так: http://take.ms/QCvRK

Я пробовал различные параметры в NSMutableParagraphStyle, но я не мог получить разрыв строки после каждого изображения.

Добавление разрыва строки ("\r") вокруг текстового вложения приведет к ошибке глифа

  !!! _NSLayoutTreeLineFragmentRectForGlyphAtIndex invalid glyph index 1
  !!! _NSGlyphTreeInvalidateGlyphsForCharacterRange invalid char range 1
  !!! _NSGlyphTreeInvalidateGlyphsForCharacterRange character count mismatch
  !!! _NSLayoutTreeLineFragmentRectForGlyphAtIndex invalid glyph index 0
  !!! _NSLayoutTreeLineFragmentRectForGlyphAtIndex invalid glyph index 0
  !!! _NSLayoutTreeLineFragmentUsedRectForGlyphAtIndex invalid glyph index 2147483647

Я попытался создать подкласс NSTextAttachment для переопределения attachmentBoundsForTextContainer: предложил LineFragment:glyphPosition:characterIndex: так, чтобы ширина была равна ширине устройства, это привело к тому, что прикрепленное изображение выглядит взорванным.

Любое предложение о том, как я могу ввести разрыв строки сразу после каждого изображения? Также было бы здорово, если бы я мог заставить текст обтекать вложения изображений.

Заранее спасибо.

0 ответов

Другие вопросы по тегам