ios学习傲视苍穹iOS《Objective-C》VIP专题小知识点

iOS开发之图文混编

2016-09-14  本文已影响1570人  傲视苍穹

实现图文混排效果的展示,这样我们就会用到这两个类:NSTextAttachment、NSMutableAttributedString。

NSTextAttachment是iOS7新增的类,作为文本的附件,可以放文件,可以放数据,所以是图文混编实现的一个重要的类

//可以将需要显示的图片赋值给这个属性.
@property(nullable, strong, NS_NONATOMIC_IOSONLY) UIImage *image 
//可以设置显示的图片大小.
@property(NS_NONATOMIC_IOSONLY) CGRect bounds

NSMutableAttributedString是继承于NSAttributedString,这个类是一个主要可以对文字的颜色、下划线等诸多属性进行修改的字符串类.他是实现富文本的一种方式.

常见的属性及说明

    NSFontAttributeName 字体
    NSParagraphStyleAttributeName 段落格式
    NSForegroundColorAttributeName 字体颜色
    NSBackgroundColorAttributeName 背景颜色
    NSStrikethroughStyleAttributeName删除线格式
    NSUnderlineStyleAttributeName 下划线格式
    NSStrokeColorAttributeName 删除线颜色
    NSStrokeWidthAttributeName删除线宽度
    NSShadowAttributeName 阴影

对象方法以及解释说明

     //    对这一范围内文字设置多个属性
   - (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;
      //    对这一范围内文字添加某个属性
   - (void)addAttribute:(NSString *)name value:(id)value range:(NSRange)range;
     //  对这一围内文字添加多个属性
  - (void)addAttributes:(NSDictionary *)attrs range:(NSRange)range;
        //   移除这个范围内的某个属性
   - (void)removeAttribute:(NSString *)name range:(NSRange)range;

还有一个比较重要的方法(这是NSAttributedString类别中的方法)

+ (NSAttributedString *)attributedStringWithAttachment:(NSTextAttachment *)attachment NS_AVAILABLE(10_0, 7_0);


1.首先创建一个NSTextAttachment对象,对其image属性进行赋值。

NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = [UIImage imageNamed:@"imageName"];

2.用 attributedStringWithAttachment:方法将attachment对象转换成属性字符串,以便之后将图片显示在文本中。

NSMutableAttributedString *attachmentString = (NSMutableAttributedString *)[NSAttributedString attributedStringWithAttachment:attachment];

3.将图片插入文本

如果将图片插入文本末尾可以用appendAttributedString:这个方法

[self.textView.textStorage appendAttributedString:attachmentString];

如果将图片插入光标位置话,可以用 insertAttributedString: atIndex: 这个方法

[self.textView.textStorage insertAttributedString:attachmentString atIndex:self.textView.selectedRange.location];

4.图片的显示默认是按照原大小进行渲染,如果对图像大小有要求,需要调整图像大小的话,可以有两种方法。

- (CGRect)attachmentBoundsForTextContainer:(NSTextContainer *)textContainer proposedLineFragment:(CGRect)lineFrag glyphPosition:(CGPoint)position characterIndex:(NSUInteger)charIndex;

这个方法会返回一个attachment的CGRect,如果需要调整attachment的大小,可以在这里面进行,也可以在里面限制attachment的大小

5.对于UITextView中的图片,如果想要点击效果的话,可以实现UITextViewDelegate这个协议里面的方法

- (BOOL)textView:(UITextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange;

具体的点击效果可以写在上面这个方法中,最后的返回值为YES,则图片可以被复制、保存,返回值NO则不能,但是都不会影响返回之前的其他操作

上一篇下一篇

猜你喜欢

热点阅读