zoukankan      html  css  js  c++  java
  • UITextView实现图文混排效果

    用UITextView实现图文混排效果的展示,首先要禁用UITextView的编辑功能,将属性editable设置为NO

    1.首先创建一个NSTextAttachment对象,这个对象有一个image属性,可以将需要显示的图片赋值给这个属性

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

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

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

    3.将图片插入文本

    [_textView.textStorage appendAttributedString:attachmentString];

    如果图片插入的位置不是在文本末尾的话,可以用 insertAttributedString: atIndex: 这个方法

    4.图片的显示默认是按照原大小进行渲染,如果对图像大小有要求,需要调整图像大小的话,可以创建一个NSTextAttachment的子类,然后实现NSTextAttachmentContainer协议的这个方法

    - (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则不能,但是都不会影响返回之前的其他操作

    6.对文字和图片的其他展示效果,可以用NSAttributedString来实现

    7.如果想要实现实时编辑长图文的话,同样也是先将图片转成attachment,然后在进行相同的操作就可以了,但是要先将textView的editable属性改成YES

    下面是我做好的图文混排效果展示

  • 相关阅读:
    wing ide 注释
    dn.net/blueheart20/article/details/22080489
    ubuntu安装R时候增加软件源到sources.list,sudo apt-get update不能更新
    ubuntu install oracle jdk
    Rhadoop安装
    有向图tarjan算法求连通分量的粗浅讲解、证明, // hdu1269
    POJ 3080 多个串最长公共子序列
    POJ 3461 kmp 应用
    POJ2752 NEXT[J]特性应用利用。
    HDU 1358字符串循环节问题 ,next数组
  • 原文地址:https://www.cnblogs.com/troy94/p/5256151.html
Copyright © 2011-2022 走看看