CoreText

CoreText 实现图文混排

自作多情 提交于 2020-02-28 16:42:28
NSTextView和Attribued String 第一次接触苹果系的富文本编程是在写Mac平台上的一个输入框的时候,输入框中的文字可以设置各种样式,并可以在文字中间插入图片,好在Mac的AppKit中提供了NSTextView这个支持富文本编辑器控件。此控件背后是通过什么方式来描述富文本的呢?答案是NSAttributedString,很多编程语言都提供了AttributedString的概念。NSAttributedString比NSString多了一个Attribute的概念,一个NSAttributedString的对象包含很多的属性,每一个属性都有其对应的字符区域,在这里是使用NSRange来进行描述的。下面是一个NSTextView显示富文本的例子 NSMutableAttributedString *attributedString = [[[NSMutableAttributedString alloc] initWithString:@"测试富文本显示"] autorelease]; //为所有文本设置字体 [attributedString addAttribute:NSFontAttributeName value:[NSFont systemFontOfSize:24] range:NSMakeRange(0, [attributedString

CoreText进阶(四)-文字行数限制和显示更多

喜夏-厌秋 提交于 2019-12-10 15:23:56
本文的主要内容是使用CoreText如何进行行数的限制,以及设置了行数限制末尾的内容被截断了怎么设置截断的标识。此外,还有如何设置自定义的截断标识字符串(比如“显示更多”)、设置自定义截断标识字符串的点击事件等的相关讨论 其它文章: CoreText入门(一)-文本绘制 CoreText入门(二)-绘制图片 CoreText进阶(三)-事件处理 CoreText进阶(四)-文字行数限制和显示更多 CoreText进阶(五)- 文字排版样式和效果 CoreText进阶(六)-内容大小计算和自动布局 CoreText进阶(七)-添加自定义View和对其 用例和效果 Demo: CoreTextDemo 效果图: 默认的截断标识和自定义的截断标识符效果图  点击查看更多之后的效果图  为了可以设置显示的行数以及截断的标识字符串, YTDrawView 类提供了三个属性,外部可以通过设置参数的方式来设置行数和截断的标识字符串,并且可以设置点击事件 @property (nonatomic, assign) NSInteger numberOfLines; ///< 行数 @property (nonatomic, strong) NSAttributedString *truncationToken;///<截断的标识字符串,默认是"..." @property (nonatomic,

使用CoreText实现图文混排

你。 提交于 2019-12-07 19:14:07
OS没有现成的支持图文混排的控件,而要用多个基础控件组合拼成图文混排这样复杂的排版,是件很苦逼的事情。对此的解决方案有使用CoreText进行绘制,或者使用TextKit。本文主要讲解对于CoreText的使用。 案例下载地址 https://github.com/ClavisJ/CoreTextDemo 环境信息: Mac OS X 10.10.1 Xcode 6.1.1 iOS 8.1 正文: 一、Core Text简介 CoreText是基于IOS3.2及OSX10.5的用于文字精细排版的文本框架。它直接与Core Graphics(又称:Quartz)交互,将需要显示的文本内容,位置,字体,字形直接传递给Quartz,与其他UI组件相比,能更高效的进行渲染。 Core Text 架构图 二、CoreText与UIWebView在排版方面的优劣比较 UIWebView也常用于处理复杂的排版,对应排版他们之间的优劣如下(摘自 《iOS开发进阶》—— 唐巧): CoreText占用的内容更少,渲染速度更快。UIWebView占用的内存多,渲染速度慢。 CoreText在渲染界面的前就可以精确地获得显示内容的高度(只要有了CTFrame即可),而WebView只有渲染出内容后,才能获得内容的高度(而且还需要用JavaScript代码来获取)。

iOS CoreText CTLineGetStringRange with CTLineRef from CTLineCreateTruncatedLine

匿名 (未验证) 提交于 2019-12-03 09:05:37
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I have the following code in iOS: CFAttributedStringRef attributedString = ... CTLineRef line = CTLineCreateWithAttributedString(attributedString); CTLineRef truncatedLine = CTLineCreateTruncatedLine(line, 50.0, kCTLineTruncationEnd, NULL); CFRange lineRange = CTLineGetStringRange(line); CFRange truncatedLineRange = CTLineGetStringRange(truncatedLine); My lineRange is the same as truncatedLineRange. Why? The documentation makes no mention of this. 回答1: According to the coretext-dev mailing list , this is expected behavior : The truncated

How to highlight CoreText with changing highlight colors?

匿名 (未验证) 提交于 2019-12-03 02:50:02
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I have a subclass of UIView that implements code to draw CoreText. In the application, that UIView is drawn inside a UIScrollView. Here is the code that I currently use in drawRect: to render an NSAttributedString: CGContextRef context = UIGraphicsGetCurrentContext(); float viewHeight = self.bounds.size.height; CGContextTranslateCTM(context, 0, viewHeight); CGContextScaleCTM(context, 1.0, -1.0); CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1.0, 1.0)); CGMutablePathRef path = CGPathCreateMutable(); CGRect bounds = CGRectMake