IOS7-TextKit

-------------------------------------------TextKitDemo---------------------------------------

- (void)viewDidLoad
{
    [super viewDidLoad];

    _textView = [[UITextView alloc]initWithFrame:CGRectMake(0,20,320, 200)];
    _textView.text = @"sldjdsflsdflsflskfls水电费了解多少分 双方就发生了地方我 都是浪费了多少积分离开多少份简历上发动机我收到了房间里的减肥了手机费我lfsdjfdfks发生的楼房的i地上了飞机了时间了i是的房间里的手机发送了地方历史的房价都是浪费";
    _textView.font = [UIFont systemFontOfSize:14];
    [self.view addSubview:_textView];

    NSTextStorage *textStorage = [[NSTextStorage alloc]initWithString:_textView.text];//用于文本存储字符和相关属性

    NSLayoutManager *layoutManager = [[NSLayoutManager alloc]init];//用于管理文本存储
    [textStorage addLayoutManager:layoutManager];

    CGRect textViewRect = CGRectInset(self.view.bounds, 10.0, 20.0);//(10, 20,300, 440),view的宽减20,高减40。
    NSLog(@"rect = %@",NSStringFromCGRect(textViewRect));
    _textContainer = [[NSTextContainer alloc]initWithSize:textViewRect.size];//排版区域
    [layoutManager addTextContainer:_textContainer];

    [_textView removeFromSuperview];
    _textView = [[UITextView alloc]initWithFrame:textViewRect textContainer:_textContainer];/*根据排版区域初始化*/
    [self.view addSubview:_textView];

    //设置印刷效果
    [textStorage beginEditing];

    NSDictionary *attrsDic = @{NSTextEffectAttributeName: NSTextEffectLetterpressStyle};
    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc]initWithString:_textView.text  attributes:attrsDic];
    [textStorage setAttributedString:attrStr];

    [self markWord:@"我" inTextStorage:textStorage];
    [self markWord:@"i" inTextStorage:textStorage];

    [textStorage endEditing];

    //2.嵌入图片
    _tImageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"[email protected]"]];
    _tImageView.frame = CGRectMake(80,46,150, 70);
    [self.view addSubview:_tImageView];
    //
    [self.view insertSubview:_textView belowSubview:_tImageView];
    _textView.textContainer.exclusionPaths = @[[self translateBezierPath]];/*设置环绕路径*/

    //3监听用户设置字体大小
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(preferredContentSizeChanged:) name:UIContentSizeCategoryDidChangeNotification object:nil];
}

-(void)preferredContentSizeChanged:(NSNotification *)notification
{
    self.textView.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody];
}

-(void)markWord:(NSString *)word inTextStorage:(NSTextStorage *)textStorage
{
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:word options:0 error:nil];
    NSArray *matches = [regex matchesInString:_textView.text options:0 range:NSMakeRange(0, [_textView.text length])];

    for (NSTextCheckingResult *match in matches)
    {
        NSRange matchRange = [match range];
        //改变属性匹配出来的i和我字符
        [textStorage addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:matchRange];
    }

}

-(UIBezierPath *)translateBezierPath
{
    CGRect imageRect = [self.textView convertRect:_tImageView.frame fromView:self.view];
    UIBezierPath *newPath = [UIBezierPath bezierPathWithRect:imageRect];
    return newPath;
}

Demo下载:https://github.com/forrHuen/UITextKit

时间: 2025-01-03 17:29:37

IOS7-TextKit的相关文章

IOS7 textkit 的相关

去年基于5.0开发的时候,自己用coreText编写了一个富文本,所有的效果都实现的很好.但是没有去测试效率,不过在cell重用的时候表现不错,在4s上面也不会卡顿. 唯一一个问题就是,在使用AL的时候,不方便.所以,此次新版本是基于7.0开发.决定使用textkit重新编写一次. 下面是一些基本的使用: @interface MMTextAttachment : NSTextAttachment { } @end @implementation MMTextAttachment //I wan

TextKit 的使用----

TextKit是在iOS7中新出的,实现了对CoreText的封装,使用起来更加方便. 虽然是新出的,但也不代表立马就能上手-_-!!,TextKit可以实现图文混排效果,很好用. 1. 使用TextKit加载基本的文本 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 - (void)viewDidLoad {     [super viewDidLoad];     // 装载内容的容器     NS

Dynamic支持CollectionView布局 、 MotionEffects特效 、 BlurImage效果 、 TextKit

1 使用UIDynamicAnimator对集合视图进行布局 1.1 问题 UIKit Dynamic动力模型一个非常有趣的用途就是影响集合视图的布局,可以给集合视图的布局添加各种动力行为,使其产生丰富多彩的效果,本案例使用UIDynamicAnimator对集合视图进行布局,实现一个弹性列表,如图-1所示: 图-1 1.2 方案 首先创建一个SingleViewApplication项目,给UIColor类创建一个分类UIColor+RandomColor,提供一个产生随机颜色的静态方法ran

iOS 7系列译文:认识 TextKit

OS 7:终于来了,TextKit.   功能 所以咱们到了.iOS7 带着 TextKit 登陆了.咱们看看它可以做什么!深入之前,我还想提一下,严格来说,这些事情中的大部分以前都可以做.如果你有大量的资源和时间来用CoreText构建一个文本引擎,这些都是可以做的.但是如果以前你想构建一个完善的富文本编辑器,你得花费几个月的时间.现在就非常简单,你只需要到在Xcode里打开一个界面文件,然后将UITextView拖到你的试图控制器,就可以获得所有的功能: 字距调整(Kerning):所有的字

用TextKit实现表情混排

Textkit是iOS7新推出的类库,其实是在之前推出的CoreText上的封装,有了这个TextKit,以后不用再拿着CoreText来做累活了,根据苹果的说法,他们开发了两年多才完成,而且他们在开发时候也将表情混排作为一个使用案例进行研究,所以要实现表情混排将会非常容易.     TextKit并没有新增的类,他是在原有的文本显示控件上的封装,可以使用平时我们最喜欢使用的UILabel,UITextField,UITextView里面就可以使用了.          1.NSAtrribut

ios7新特性实践

一 iOS 7 新特性:视图控制器切换API 二 iOS 7系列译文:认识 TextKit 三 iOS 7系列译文:iOS7的多任务处理 四 iOS7 最佳实践:一个天气应用案例(上) 五 iOS7 最佳实践:一个天气应用案例(下) ios7新特性实践,布布扣,bubuko.com

iOS7 UIKit动力学-重力特性UIGravityBehavior

续文 在iOS7中事实上新加了非常多新的特性.之前看过,也了解过一些新的内容.如新的动力学特性,TextKit的图文混排,还有自己定义的动画跳转等.那段时间也比較忙,没时间整理.如今项目也弄完了,打算在学习旧的东西的同一时候好好的区了解这些新的内容. 先说下UIDynamicAnimator类,全部仿真行为的父类,这个给我的感觉就跟上先问文一样.或者像是加入手势或者加入视图的感觉,详细往下细说. UIDynamicBehavior:仿真行为,是动力学行为的父类,主要的动力学行为类UIGravit

用TextKit实现图文混排(转载)

Textkit是iOS7新推出的类库,其实是在之前推出的CoreText上的封装,有了这个TextKit,以后不用再拿着CoreText来做累活 了,根据苹果的说法,他们开发了两年多才完成,而且他们在开发时候也将表情混排作为一个使用案例进行研究,所以要实现表情混排将会非常容易.     TextKit并没有新增的类,他是在原有的文本显示控件上的封装,可以使用平时我们最喜欢使用的 UILabel,UITextField,UITextView里面就可以使用了.          1.NSAtrrib

初识 TextKit

iOS 7 的发布给开发者的案头带来了很多新工具.其中一个就是 TextKit.TextKit 由许多新的 UIKit 类组成,顾名思义,这些类就是用来处理文本的.在这里,我们将介绍 TextKit 的来由.它的组成,以及通过几个例子解释开发者怎样将它派上大用场. 但是首先我们得先阐明一个观点:TextKit 可能是近期对 UIKit 最重要的补充了.iOS 7 的新界面用纯文本按钮替换了大量的图标和边框.总的来说,文本和文本布局在新 OS 系统的视觉效果中所占有的重要性大大提高了.iOS7 的

iOS系列教程之TextKit实现图文混排读后记

iOS系列教程之TextKit实现图文混排读后记 前两天看搜狐家明哥写的<TextKit实现图文混排> 今晚回家看了下API发现了一个更加取巧的实现方式.可以直接将后台返回的html富文本用textView显示出来. 记得两年前当时做这个的时候还是借助了笨重的webview. > Textkit是iOS7新推出的类库,其实是在之前推出的CoreText上的封装,有了这个TextKit,以后不用再拿着CoreText来做累活了, 下面是我分别用UITextView 和UIWebView 显