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: так, чтобы ширина была равна ширине устройства, это привело к тому, что прикрепленное изображение выглядит взорванным.
Любое предложение о том, как я могу ввести разрыв строки сразу после каждого изображения? Также было бы здорово, если бы я мог заставить текст обтекать вложения изображений.
Заранее спасибо.