CoreText 简单 使用

 1 - (void)drawRect:(CGRect)rect
 2 {
 3     NSString *longText = @"CoreText"; /* ... */
 4     NSRange rang =[self.hightString rangeOfString:longText];
 5     longText = @"CoreText";
 6      NSMutableAttributedString *string = [[NSMutableAttributedString alloc]
 7                                          initWithString:longText];
 8
 9
10     if (rang.location == NSNotFound)
11     {
12
13     }
14
15
16     // make a few words bold
17     CTFontRef helvetica = CTFontCreateWithName(CFSTR("Helvetica"), 14.0, NULL);
18     CTFontRef helveticaBold = CTFontCreateWithName(CFSTR("Helvetica-Bold"), 14.0, NULL);
19
20     [string addAttribute:(id)kCTFontAttributeName
21                    value:(__bridge id)helvetica
22                    range:NSMakeRange(0, [string length])];
23
24
25     [string addAttribute:(id)kCTForegroundColorAttributeName
26                    value:(id)[UIColor redColor].CGColor
27                    range:NSMakeRange(3, 5)];
28
29     // layout master
30     CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(
31                                                                            (CFAttributedStringRef)string);
32
33     // left column form
34     CGMutablePathRef leftColumnPath = CGPathCreateMutable();
35     CGPathAddRect(leftColumnPath, NULL,
36                   CGRectMake(0, 0,
37                              self.bounds.size.width/2.0,
38                              self.bounds.size.height));
39
40     // left column frame
41     CTFrameRef leftFrame = CTFramesetterCreateFrame(framesetter,
42                                                     CFRangeMake(0, 0),
43                                                     leftColumnPath, NULL);
44
45     // right column form
46     CGMutablePathRef rightColumnPath = CGPathCreateMutable();
47     CGPathAddRect(rightColumnPath, NULL,
48                   CGRectMake(self.bounds.size.width/2.0, 0,
49                              self.bounds.size.width/2.0,
50                              self.bounds.size.height));
51
52     NSInteger rightColumStart = CTFrameGetVisibleStringRange(leftFrame).length;
53
54     // right column frame
55     CTFrameRef rightFrame = CTFramesetterCreateFrame(framesetter,
56                                                      CFRangeMake(rightColumStart, 0),
57                                                      rightColumnPath,
58                                                      NULL);
59
60     // flip the coordinate system
61     CGContextRef context = UIGraphicsGetCurrentContext();
62     CGContextSetTextMatrix(context, CGAffineTransformIdentity);
63     CGContextTranslateCTM(context, 0, self.bounds.size.height);
64     CGContextScaleCTM(context, 1.0, -1.0);
65
66     // draw
67     CTFrameDraw(leftFrame, context);
68     CTFrameDraw(rightFrame, context);
69
70     // cleanup
71     CFRelease(leftFrame);
72     CGPathRelease(leftColumnPath);
73     CFRelease(rightFrame);
74     CGPathRelease(rightColumnPath);
75     CFRelease(framesetter);
76     CFRelease(helvetica);
77     CFRelease(helveticaBold);
78    // [string release];
79
80 }

CoreText

时间: 2024-11-08 17:58:00

CoreText 简单 使用的相关文章

简单的Coretext 图文混排

在很多新闻类或有文字展示的应用中现在都会出现图文混排的界面例如网易新闻等,乍一看去相似一个网页,其实这样效果并非由UIWebView 加载网页实现.现在分享一种比较简单的实现方式 iOS sdk中为我们提供了一套完善的文字排版开发组件:CoreText.CoreText库中提供了很多的工具来对文本进行操作,例如CTFont.CTLine.CTFrame等.利用这些工具可以对文字字体每一行每一段落进行操作. 此例中默认图片都在右上方,且为了美观和开发简便设定所占宽度都相同. 1.        

CoreText原理及基本使用方法

关于富文本的排版也是现在的一个技术点,以下是近日关于CoreText的学习记录以及个人理解,希望能对正在学习CoreText的朋友起到帮助. 1.框架坐标系 首先让我们先来看看CoreText坐标系和UIKit坐标系的不同 从图中可看出CoreText坐标系是以左下角为坐标原点,而我们常使用的UIKit是以左上角为坐标原点,因此在CoreText中的布局完成后需要对其坐标系进行转换,否则直接绘制出现位置反转的镜像情况.在通常情况下我们一般做法是直接获取当前上下文.并将当前上下文的坐标系转换为Co

CoreText的绘制流程-转

来自:http://blog.sina.com.cn/s/blog_7c8dc2d50101lbb1.html 使用coreText进行文本绘制,需要在工程中添加CoreText.framework,然后在AttributedLabel.m里import就可以使用了.coreText负责绘制,那绘制的内容和属性则要靠NSAttributedString来存储,如果属性具有不确定性,可以使用NSMutableAttributedString,方便后面添加属性. 先来看下如何创建一个具有两个颜色,两

CoreText实现图文混排之点击事件-b

CoreText实现图文混排之点击事件 主要思路 我们知道,CoreText是基于UIView去绘制的,那么既然有UIView,就有 -(void)touchesBegan:(NSSet<UITouch *> )touches withEvent:(UIEvent )event方法,我们呢,就是基于这个方法去做点击事件的. 通过touchBegan方法拿到当前点击到的点,然后通过坐标判断这个点是否在某段文字上,如果在则触发对应事件. 上面呢就是主要思路.接下来呢,我们来详细讲解一下.还是老规矩

CoreText中坐标转换的一些理解

引言 学习CoreText,最初的想法是写一个杂志类的应用,因为对网易和zarca应用一些技术的疑问,所以,自己有了很强的兴趣欲和钻研欲,开始这段有点不顺的学习过程. 难题 1.对CGContextRef的CTM不理解,观念导致很多东西没有正确的理解.2.对NS的了解不多,一些文字绘制方面的座标系问题让自己很迷惑.3.对CoreText麻烦的API严重不适应. 关于CTM CTM,Context Translate Matrix. 它是把要绘制的上下文以一个叫做Matrix的东西来表示,可以简单

基于 CoreText 的排版引擎

本章前言 使用 CoreText 技术,我们可以对富文本进行复杂的排版.经过一些简单的扩展,我们还可以实现对于图片,链接的点击效果.CoreText 技术相对于 UIWebView,有着更少的内存占用,以及可以在后台渲染的优点,非常适合用于内容的排版工作. 本章我们将从最基本的开始,一步一步完成一个支持图文混排.支持图片和链接点击的排版引擎. CoreText 简介 CoreText 是用于处理文字和字体的底层技术.它直接和 Core Graphics(又被称为 Quartz)打交道.Quart

CoreText实现图文混排之点击事件

今天呢,我们继续把CoreText图文混排的点击事件补充上,这样我们的图文混排也算是圆满了. 哦,上一篇的链接在这里 http://www.jianshu.com/p/6db3289fb05d CoreText实现图文混排.所有需要用到的准备知识都在上一篇,没有赶上车的朋友可以去补个票~ 上正文. CoreText做图文混排之点击事件 主要思路 我们知道,CoreText是基于UIView去绘制的,那么既然有UIView,就有 -(void)touchesBegan:(NSSet)touches

iOS实现简单图文混排效果

在很多新闻类或有文字展示的应用中现在都会出现图文混排的界面例如网易新闻等,乍一看去相似一个网页,其实这样效果并非由UIWebView 加载网页实现.现在分享一种比较简单的实现方式 iOS sdk中为我们提供了一套完善的文字排版开发组件:CoreText.CoreText库中提供了很多的工具来对文本进行操作,例如CTFont.CTLine.CTFrame等.利用这些工具可以对文字字体每一行每一段落进行操作. 此例中默认图片都在右上方,且为了美观和开发简便设定所占宽度都相同. 首先,需要引入Core

TYAttributedLabel——简单,强大的iOS属性文本控件

本文转载至 http://www.mobile-open.com/2015/86578.html TYAttributedLabel 简单,强大的属性文本的控件(无需了解CoreText),支持图文混排显示,支持添加链接,image和UIView控件,支持自定义排版显示 更新: v2.4 修复imge放大bug,新增imageAlignment 和 autolayout支持,以及相应的demo,感谢xinzhengzhang,nonstriater v2.3 新增 做题demo,代码优化(4s真