CoreText文字排版

CoreText:绘制纯文本内容 文字排版的基础概念字体(Font):和我们平时说的字体不同,计算机意义上的字体表示的是同一大小,同一样式(Style) 字形的集合。从这个意义上来说,当我们为文字设置粗体,斜体时其实是使用了另外一种字体(下划线不算)。而平时我们所说的字体只是具有相同设计属性的字体 集合,即Font Family或typeface。  字符(Character)和字形(Glyphs):排版过程中一个重要的步骤就是从... 阅读详情

类似的文字方法比较

在iOS中,我们可以使用UIKit和CoreGraphics/Quartz都可以绘制文字和图片,UIKit可以提供简单的操作文本的方法,但是你无法修改文本的颜色和其中的单词,而如果使用CoreGraphics/Quartz,几乎允许你做任何系统允许做的事情,但是你必须为每个自行计算位置,并且画在屏幕上,比较麻烦,而CoreText结合了这两者,你可以完全控制位置、布局、类似文本大小和颜色这样的属性,而 Core Text 将帮你完善其它的东西——类似文本换行、字体呈现等等。

初探CoreText

这里写图片描述

上图是我在网上找的CoreText绘制的流程,首先你需要创建一个NSAttributedString,并且通过CTFramesetterCreateWithAttributedString来生成一个CTFramesetter的结构。

CTFramesetterRef ctFramesetter = CTFramesetterCreateWithAttributedString((CFMutableAttributedStringRef)attributedString);

然后我们要创建一个CGPath ,这个用来指定绘制的文本的范围,CTFramesetter通过这个范围来创建一个用于绘制的帧CTFrame,当你创建帧时,您指定一个用于此帧矩形内的子文本范围。Core Text 为每行文本自动创建一个 CTLine (注意这里) 与并创建多个 CTRun 文本分段,每个 CTRun 内的文本有着同样的格式,CTRun代表这文本的一个属性,比如有个CTRun代表粗体,有的代表红色字体等等,正是因为有CTRun,所以你可以精确的控制字距,连字,宽度,高度等更多属性,在把它画到上下文中

CGMutablePathRef path = CGPathCreateMutable();
    CGRect bounds = CGRectMake(0.0, 0.0, self.bounds.size.width, self.bounds.size.height);
    CGPathAddRect(path, NULL, bounds);
CTFrameRef ctFrame = CTFramesetterCreateFrame(ctFramesetter,CFRangeMake(0, 0), path, NULL);
CTFrameDraw(ctFrame, context);

你在这里可能会想,我都没有设置这些属性,那生成的CTRun难道是空的吗?往上看,你创建CTFramesetter的时候不是利用了NSAttributedString了吗?我们在之前通过给属性字符串设置属性(后面创建的CTRun是通过这些属性自动生成的),
比如setAttributes:range,但在实践中这是一种笨拙的处理方式(除非你费力地编写大量代码),因此,为了更简单地处理问题,我们将创建一个简单的文本标记解析器,它允许我们在内容中使用简单的标签设置格式。

其实使用coretext来排版只是通过CTRun把该显示图片的地方给预留下来了,真正的显示图片还是要通过coreGraphics,当要显示图片的时候,我们通过遍历所有的CTRun,通过下面的方法

NSDictionary* attributes = (NSDictionary*)CTRunGetAttributes(run);

找到当初预留的那个NSAttributed的那块地方,然后通过

CGContextDrawImage(context, imageDrawRect, image.CGImage);

把图片画上去。当 Core Text 获知一个拥有 CTRunDelegate 委托的 CTRun 时,它会询问委托对象 —— 我需要为这些块数据保留多少宽度和高度?这样你就在文本中建造了一个洞,然后你把图像在那里绘制出来。

CTRunDelegateCallbacks imageCallbacks;
    imageCallbacks.version = kCTRunDelegateVersion1;
    imageCallbacks.dealloc = RunDelegateDeallocCallback;
    imageCallbacks.getAscent = RunDelegateGetAscentCallback;
    imageCallbacks.getDescent = RunDelegateGetDescentCallback;
    imageCallbacks.getWidth = RunDelegateGetWidthCallback;
    //第二个参数作为鉴别是哪个run的标志
    CTRunDelegateRef runDelegate = CTRunDelegateCreate(&imageCallbacks, taobaoImageName);
[imageAttributedString addAttribute:(NSString *)kCTRunDelegateAttributeName value:(id)runDelegate range:NSMakeRange(0, 1)];//指定给图片留的空地的位置

下面是我在网上找的CoreText的实例程序
链接: http://pan.baidu.com/s/1pJ039s3 密码: ewxn

【原创】SAP/Oracle 集团企业海外全球化实施注意事项: 一带一路本地化 (持续更新)... ABC集团SAP的系统平台已经扩展到全球一百来个国家和地区,SAP系统平台的全球实施项目中, 当时是需要支持当地的业务和法律法规的合规要求。   当时客户也是缺乏当地的资源以及对当地法律法规和业务实践的了解,需要团队提供了全球化的支持,通过我们全球产品技术专家充分传递了各区域的本地化支持和实践 而且近年来我们发现一些国家和政府,陆续都在推出一些新的税改和合规的要求,接下来基于这些要求,我们全球... 阅读详情

相关推荐

体验灵雀云-创建基于Docker的云服务

今天体验了一下灵雀云,创建了第一个基于Docker的云服务。 1.登录灵雀云 2.开始使用 登录之后,从"控制台"进入操作界面,开始创建服务。 首先需要选择一个镜像。灵雀云已经为您提供了一些常用的镜像列表。请在“常用镜像”列表中,选择“其它”,然后找到“alauda/hello-world”镜像,点击它右侧的“选择”按钮,进入服务参数配置页面。 选择完要创建的

tomcat的专栏 3234

CoreText-文字排版

CoreText学习心得

dotNetF的博客 1055

别让运放自激振荡!手把手教你用波特图分析反相放大电路的稳定性(附LTspice仿真)

本文详细解析了运算放大器在反相放大电路中的稳定性问题,通过波特图分析和LTspice仿真,揭示了自激振荡的成因及解决方案。文章从故障现象识别到数学工具应用,再到实战仿真和工程优化,提供了一套完整的稳定性分析工具链,帮助工程师有效避免运放自激振荡问题。

weixin_31682031的博客 303

CorelDRAW对文字处理完美程度没有其二

CorelDRAW,一个令人惊异的绘图魔法。只用她一点皮毛的功能就能做出各种美观的文字特效,好,不要光说不练,现在就让我们伸出爪子来试一试吧。   打开CorelDRAW,新建一个文件,然后用文字工具输入文字。字体方面大家尽管自由发挥就好了,要注意一点,如果挑“宋体”、“Times new roman”等太瘦太细的字体的话,用细的字体做出来的虚化文字效果不明显。过细的字体等到您想尝试另外

qq_39836362的博客 961

深入解析AutoConfigURL劫持:从注册表权限到一键修复

本文深入解析了AutoConfigURL劫持的原理,揭示其通过篡改注册表权限锁定浏览器设置的机制。文章提供了从手动修复注册表权限到使用一键修复工具的详细解决方案,并指导用户进行DNS检查与病毒查杀,以彻底根除此类顽固劫持问题。

weixin_29229989的博客 766

spyglass之功耗分析

用于功耗分析的软件除了ptpx外,spyglass也可以。ptpx的功耗分析是基于netlist(网表)进行的,一般用于分析综合后的pre功耗和P&R后的post功耗,但这已经是项目进行到比较后期了,如果后期发现功耗数据与我们目标功耗相差较大,则意味着需要功耗优化,这时有可能会将项目计划节点延迟。如果在前期designer可以获得设计模块的功耗数据,可提早优化功耗,spyglass则为designer提供了一个很好的手段去评估功耗,从而提前优化功耗。

u011974971的博客 9195

CoreText 实现图文混排

摘要 本文所涉及的代码你可以在这里下载到 https://github.com/kejinlu/CTTest,包含两个项目,一个Mac的NSTextView的测试项目,一个iOS的Core Text的测试项目 NSTextView和Attribued String 第一次接触苹果系的富文本编程是在写Mac平台上的一个输入框的时候,输入框中的文字可以设置各种样式,并可以在文字中

Bob的专栏 1139

Auto.js实现视频号点赞自动化

摘要:本文介绍了一个微信视频号自动化点赞的实现方案。通过定位点赞图标和数量容器,点击点赞按钮后检测点赞数变化,若发现取消点赞则自动补点。核心代码包括:1)获取点赞容器和图标;2)记录点赞前后数量;3)判断是否误取消并补点;4)循环执行点赞和滑动页面操作。该方案解决了滑动页面可能导致误取消点赞的问题,实现了自动化批量点赞功能。文章强调仅供学习参考,提醒勿滥用该技术。

分享前端工程化、AI 应用、Agent 开发与大模型实践! 2574

iOS开发 Coretext(文字排版)的基本用法

oreText 框架中最常用的几个类:   CTFontCTFontCollectionCTFontDescriptorCTFrameCTFramesetterCTGlyphInfoCTLineCTParagraphStyleCTRunCTTextTabCTTypesetter   先来了解一下该框架的整体视窗组合图: CTFrame 作为一个整体的画布(Ca

梦醒梦飞翔的专栏 4737

JAVA:Spring Boot3 集成 ShardingSphere 实现数据分库分表

本文介绍了基于Spring Boot和ShardingSphere-JDBC实现分库分表与读写分离的解决方案。针对高并发、大数据量场景下单库单表的性能瓶颈,通过配置ShardingSphere-JDBC实现:1)订单表按user_id和order_id分片到两个库和两张表;2)读写分离,写操作路由至主库,读操作在从库间负载均衡。方案使用Druid连接池优化,支持业务透明,无需修改SQL。

木头 660

【WorkBuddy从入门到精通实战教程】使用手册 第 1 章 初识 WorkBuddy

腾讯推出全场景AI办公助手WorkBuddy,突破传统聊天机器人局限,实现从需求理解到结果交付的全流程自动化。该工具通过自然语言交互,可自主规划执行复杂任务,包括文件处理、数据分析、PPT制作等,支持多模型切换和技能扩展。内置权限管控机制确保本地文件操作安全,显著降低人工切换工具的成本,提升职场效率。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 1290

iOS文字排版(CoreText)

和我们平时说的字体不同,计算机意义上的字体表示的是同一大小,同一样式(Style)字形的集合。从这个意义上来说,当我们为文字设置粗体,斜体时其实是使用了另外一种字体(下划线不算)。 iOSCoreText 转自阿毛的蛋疼地   第一次比较深入接触iOS文字排版相关内容是在12年底,实现某IM项目聊天内容的图文混排,照着nimbus的A

xiaobo0134的专栏 1278

Harness Engineering:让Coding Agent真正落地生产

本文将带你系统性地了解如何让Coding Agent真正落地生产,核心是依托(全球领先的持续交付、云成本管理、 feature flagging、安全治理一体化平台),结合企业级AIDD(AI-Driven Development)的工程化实践,构建一套可信赖、可观测、可扩展、可治理的Coding Agent落地体系。核心概念与理论基础:什么是Coding Agent?它和普通的AI代码补全工具(比如GitHub Copilot)有什么区别?什么是Harness Engineering?

移动开发前沿的博客 455

coretext IOS文字排版

转自阿毛的蛋疼地   第一次比较深入接触iOS文字排版相关内容是在12年底,实现某IM项目聊天内容的图文混排,照着nimbus的AttributedLabel和Raywenderlish上的这篇文章《Core Text Tutorial for iOS: Making a Magazine App》改出了一个比较适用于聊天内容展现的图文混排(文字和表情)控件。   选择

C 617

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[转] iOS文字排版(CoreText)那些事儿

文章转载自http://www.cocoachina.com/applenews/devnews/2014/0521/8504.html iOS文字排版(CoreText)那些事儿 转自阿毛的蛋疼地 第一次比较深入接触iOS文字排版相关内容是在12年底,实现某IM项目聊天内容的图文混排,照着nimbus的AttributedLabel和Raywenderlish上的这篇文章《...

weixin_30439131的博客 96

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

iOS文字排版(CoreText)那些事儿

http://www.cocoachina.com/industry/20140521/8504.html 第一次比较深入接触iOS文字排版相关内容是在12年底,实现某IM项目聊天内容的图文混排,照着nimbus的AttributedLabel和Raywenderlish上的这篇文章《 Core Text Tutorial for iOS: Making a Magazine A

jeffasd的专栏 524

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

机器人核心技术实战:从ROS仿真到工程落地的完整指南

机器人技术正从概念走向广泛应用,其核心在于感知、决策与执行三大模块的协同。感知层依赖计算机视觉和力觉传感器赋予机器人“眼睛”与“皮肤”,决策层通过路径规划与任务分解形成“大脑”,执行层则借助运动控制实现精准操作。这一技术栈的价值在于解决重复、繁重或危险场景的自动化需求,广泛应用于工业装配、物流分拣及精密手术等领域。本文聚焦机器人开发中的工程化实践,以ROS操作系统和Gazebo仿真平台为基础,通过搭建开发环境、实现视觉识别与运动规划的完整示例,系统拆解了从仿真到实物部署的关键步骤与常见问题,为开发者提供了从

weixin_33834075的博客 365

iPhone用coreText(核心文本)给文字进行排版

hello!大家都知道UILabel,UITextView这些个控件,只能显示简单的文本格式,如果想要图文混排等复杂的效果,就要用到CoreText框架来实现,不过有些个复杂。 首先是要了解一下coretext的概念: The Core Text framework is an advanced, low-level technology for laying out text and

任海丽(3G/移动开发) 6227

使用CoreText排版,取得文字区域精确大小

转载于:http://ikevin.tw/209 在iOS中,要計算文字區域的大小,說實在的是有一點麻煩,因為還沒繪製文字之前,是很難得到文字的區域大小的,所以我們通常的做法是: 1.先開一個極大的區域,固定寬度,然後文字往下排。 2.設定文字大小及行距。 3.取得行數。 4.取得文字區域高度=行數X(文字大小+行距)-行距。 //註:最後一行沒有行距 5.開一個繪圖(

点点滴滴 1101

CoreText进阶(五) 文字排版样式和效果

本文的内容主要是文字的排版样式的文本的绘制效果,排版样式会涉及到内容的水平对其、行间距、段间距相关的讨论;绘制效果会涉及到文本内容的字体、颜色、阴影的相关讨论 其它文章: CoreText入门(一)-文本绘制 CoreText入门(二)-绘制图片 CoreText进阶(三)-事件处理 CoreText进阶(四)-文字行数限制和显示更多 CoreText进阶(五)- 文字排版样式和效果 Core...

weixin_33694172的博客 397
上一篇: IOS知识小集 第二期 (2015.9.14)
下一篇: IOS开发记录(一)
张小春子
博客等级 码龄13年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值