iOS:如何使用 Quartz 测量字符串的宽度和高度?

2024-01-11

在我提出问题之前,这是来自 Apple 的文档:如何使用 Quartz 确定字符串的宽度:

如果文本测量对您的应用很重要,那么可以 使用 Quartz 2D 函数计算它们。但是,您可能首先 考虑使用 ATSUI,其优势在于文本布局和 测量。 ATSUI 有多个获取文本指标的函数。不是 只能获得布局后的文本指标,但在极少数情况下 如果您需要它们,您可以获取布局前的文本指标。不像 Quartz,您必须自己执行计算,ATSUI 为您计算测量值。例如,您可以获得 通过调用 ATSUI 函数为文本设置图像边界矩形 ATSUMeasureTextImage。

如果您认为 Quartz 文本比 ATSUI(或 Cocoa),您可以按照以下步骤测量文本的宽度 石英绘制它:

  1. 调用函数CGContextGetTextPosition获取当前文本位置。
  2. 使用函数 CGContextSetTextDrawingMode 将文本绘制模式设置为 kCGTextInvisible。
  3. 绘制文本通过调用函数CGContextShowText在当前文本位置绘制文本。
  4. 通过调用函数 CGContextGetTextPosition 确定最终文本位置。
  5. 结束位置减去开始位置即可确定文本的宽度。

这是我的问题:

  1. 这真的是使用 Core Graphics 确定字符串宽度的最佳方法吗?它看起来很脆弱,而且由于我的文本与 2D 图形元素共存,我想对所有渲染使用相同的上下文。我希望有一些紧凑的方法,例如:

    CGContextGetTextWidthAndHeight(context, text);
    
  2. 我读到 ATSUI 已经过时并且将被 Core Text 取代。这是真的吗?如果是的话,iOS 中也是如此吗?


在 iPhone SDK 上,有一系列方法NSString提供你想要的。

从 iOS 7.0 开始,这些方法是 https://developer.apple.com/library/ios/documentation/UIKit/Reference/NSString_UIKit_Additions/index.html#//apple_ref/occ/instm/NSString/boundingRectWithSize:options:attributes:context::

- boundingRectWithSize:options:attributes:context:
- sizeWithAttributes:

在旧版本的 iOS 上,我们有这些,现已弃用:

– sizeWithFont:  
– sizeWithFont:forWidth:lineBreakMode:  
– sizeWithFont:constrainedToSize:  
– sizeWithFont:constrainedToSize:lineBreakMode:  
– sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS:如何使用 Quartz 测量字符串的宽度和高度? 的相关文章

  • 统一的阿拉伯语输入字段

    有没有办法将输入字段的语言统一更改为阿拉伯语 我尝试了ArabicSupport 它正确显示了阿拉伯语 但将其与输入字段一起使用却不起作用 因为 GameObject Find input field GetComponent
  • ios7.1:推送通知徽章更新问题

    我已经设置了Push Notification在我当前的项目之一中 我已遵循推送通知所需的所有说明 在 tag ios7 中工作正常 但在7 1当我的应用程序处于后台模式时 我在徽章更新中遇到问题 我的代码如下 BOOL applicati
  • 为什么无论 -rdynamic 如何,backtrace 都不包含 Objective-C 符号?

    Update 我正在 Linux 上使用 GNU 运行时 问题是not发生在带有 Apple 运行时的 MacOS 上 更新2 我在 MacOS 上编译了 GNU 运行时并用它构建了示例 该错误确实not发生在带有 GNU 运行时的 Mac
  • RestKit:如何删除核心数据条目以保持内容与服务器同步?

    我正在使用 RestKit RKObjectManager 从我的服务器获取数据并将其存储在核心数据中 请参阅我的其他post https stackoverflow com questions 17066214 restkit how t
  • 滚动高图图表

    这是我的问题 我正在使用phonegap框架来开发一个混合应用程序 并且我需要这个应用程序具有我决定使用highcharts库的图表 问题是 我似乎无法在触摸图表后滚动 至少在触摸图像的选定部分内部时 我想要做的是防止图表发生任何事件 并显
  • iOS:GMail API - 通过电子邮件发送附件

    我能够成功发送没有附件的电子邮件 但是 当我尝试使用 GTLUploadParamaters 上传附件时 出现 501 错误 我尝试添加照片库中附件的 NSData 以及仅发送图像的 URL 在这两种情况下我都得到了同样的错误 Create
  • 苹果的外部配件(蓝牙)仅适用于 MFI 设备? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我的学士论文的目标是通过蓝牙适配器将光串行设备连接到 iPad 目前我正在努力应对苹果的限制 我经常在网上看到我可以使用支持的配置文件 h
  • 如何在iOS8自定义键盘上方添加工具栏?

    My problem is write picture I really need you help Maybe inputAccessoryView inputAccessoryViwController can be used but
  • 如何在 Swift 中退出“DispatchQueue.main.asyncAfter”

    我想在调用 deinit 时退出 DispatchQueue main asyncAfter 子视图 swift DispatchQueue main asyncAfter deadline now 5 0 self doSomething
  • 重新定位时 Mapbox 默认的 compassView 会给出奇怪的结果

    我遇到一种情况 必须将地图框罗盘视图重新定位到不同的位置 当我以其他点作为其 compassView 轴旋转地图时 compassView 现在正在旋转 并给了我一个奇怪的结果 附截图 黑色mapBox默认罗盘图标是旋转的 参考截图 这是
  • 自动布局+基于总行数的动态表高度约束

    首先 这与动态单元格的高度无关 所以不要把它搞混了 我有一个场景 我创建了三张卡 详细信息卡 显示位置的具体详细信息 图表卡 根据选择显示不同的图表 更多详细信息卡 卡显示更多详细信息 以下是上述卡片的屏幕 查看以上屏幕的层次结构 Cont
  • iOS:接收“304 Not Modified”响应时 AVPlayerItem 中的错误

    这是一个非常奇怪的错误 我有一个 tableView 每个单元格都使用AVPlayer从远程服务器流式传输视频 想象一下类似 Vine 的时间线 因此 当我滚动时 重复使用的单元格会使用新视频重新配置播放器 问题是 如果我非常快地来回滚动
  • 核心数据二进制数据允许外部存储崩溃

    我在 iOS 12 0 1 上发生崩溃 日志如下 ImageIO CFDataGetBytes data 0x28539b2f0 size 154262 offset 8 count 8 dst 0x16dbf86f0 External d
  • iOS 上的三字母国家代码

    我知道您可以在 iOS 上获取所有国家 地区的两个字母的国家 地区代码 但是有没有办法获得三个字母的国家代码 So from http en wikipedia org wiki ISO 3166 1 alpha 2 http en wik
  • 将 NSDictionary 保存到文件有任何限制吗

    我想用下面的方法来保存NSDictionary void writeDicToFile NSDictionary dic fileName NSString fileName NSString filePath NSTemporaryDir
  • Xcode - 免费清除设备文件夹?

    我正在删除一些文件夹和文件 以便在驱动器上腾出更多空间 我知道在路径中 Library Developer CoreSimulator Devices 每个模拟器和每个版本都有文件夹 这个文件夹对我来说大约有 11GB 大小 我知道我可以删
  • 核心数据在没有明显原因的情况下恢复到之前的状态

    基于 Core Data 的 iOS 应用程序的一些客户报告称 他们偶尔会丢失数据 这些报告非常奇怪 这就是我想询问您对此的看法的原因 客户报告说 当他们在一段时间 几分钟 几小时或第二天 后重新打开应用程序时 他们的一些数据会丢失就像底层
  • 如何更改标签栏图标颜色从默认蓝色?

    我有四个标签 我能够将选项卡图标颜色从默认的蓝色更改为红色 或可能任何颜色 并且效果非常好 问题是它仅适用于三个选项卡项目 最后一个选项卡默认为蓝色 下面是代码 我正在编码这个rootviewcontrollerAppDelegate m您
  • Quickblox 聊天未进行身份验证

    我在我的应用程序中使用 Quickblox 进行一对一聊天 用户已经登录 但是当我尝试登录聊天时 出现以下错误 2014 03 31 12 42 09 532 MyChat 2175 3803 QBChat didNotAuthentica
  • Eddystone 信标检测问题

    以下是我使用 iPhone iOS 9 检测 Eddystone 的代码 void viewDidLoad super viewDidLoad if CLLocationManager locationServicesEnabled loc

随机推荐

  • Cobra + Viper Golang 如何测试子命令?

    我正在使用 Go 开发一个网络应用程序 到目前为止一切顺利 但现在我将 Wercker 集成为 CI 工具并开始关心测试 但我的应用程序严重依赖 Cobra Viper 配置 标志 环境变量方案 并且我不知道如何在运行测试套件之前正确初始化
  • Mathematica 中稀疏数组的 Outer 有效替代方案?

    假设我有两个非常大的列表 a1 a2 和 b1 b2 其中所有 ai 和 bj 都是大型稀疏数组 为了提高内存效率 我将每个列表存储为一个综合稀疏数组 现在我想在所有可能的 ai 和 bj 对上计算某个函数 f 其中每个结果 f ai bj
  • 是否可以通过css在不使用position属性的情况下实现绝对位置功能?

    我正在创建 Outlook 电子邮件 我创建了一个电子邮件系统 我已经签入了 Gmail yahoo 等所有电子邮件巨头 它工作得很好 但突然当我在 Outlook 中看到相同的电子邮件时 令人震惊的是 Outlook 不支持位置属性 现在
  • 准备部署时如何清理 node_modules 文件夹

    我该如何清洁节点模块准备部署代码时的文件夹 我正在使用制作一个应用程序节点 webkit并且在捆绑应用程序的最终版本时希望包含尽可能少的文件 因为解压缩过程需要一些时间 我看过npm dedupe并使用npm install product
  • Window.open 在 IE8 中不起作用?

    这是我当前使用的 JavaScript window open modules mod oneononechat chatwindow php key key color blue x winName x location 0 status
  • Spring security - 更改/登录默认路径

    我们想为我们的 Spring Boot 应用程序添加 spring 安全性 问题是我们已经 login路径已使用 所以目前我们无法加载重定向到的 Spring Security 默认登录页面 login path 我们想要保留 spring
  • X.509v3 ASN.1 到 C 数据结构

    我正在尝试创建代理证书的 X509 请求 ProxyCertInfo 扩展RFC3820 http www ietf org rfc rfc3820 txt 在 C OpenSSL 中 但我无法弄清楚应该如何定义 ProxyCertInfo
  • CDI SessionScoped bean 的非延迟实例化

    CDI新手问题 简单测试场景 JSF CDI SessionScoped beans 我需要一种优雅的方法来实例化一组已知的会话范围的 CDI bean 而无需在JSF页面或从其他 bean 调用它们的方法 作为一个测试用例 一个简单的日志
  • 我什么时候应该使用构建器设计模式? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在学习设计模式并找到了构建器设计模式 这种设计模式有什么好处以及什么时候应该使用它 我冲浪www dofactory com and www
  • getLastKnownLocation() 返回 null [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在这里阅读了很多关于这个主题的问答 但我不得不说它们都不起作用 我的问题是 即使我启用了 GPS 我也无法获取位置 除
  • 应用程序引擎 python 教程错误

    我正在尝试在这里做 python 教程http code google com appengine docs python gettingstarted helloworld html http code google com appeng
  • 如何以编程方式选择网络浏览器控件中的文本? C#

    问题是这样的 我想让我的程序的用户能够在 webBrowser 控件中搜索给定的关键字 标准 Ctrl F 我可以毫无问题地在文档中找到关键字并使用跨度和replace 函数突出显示所有实例 我am无法获得我想要使用的 查找下一个 功能 当
  • 安装 Visual Studio 2015“安装程序被阻止”并出现 10 个错误

    谁可以帮助我Visual Studio 2015安装问题 预览 Windows 更新错误 这是设置阻止的屏幕截图 以下是我在此设置中遇到的错误 Condition VersionNT v6 3 AND WindowsBuildNumber
  • Groovy def l = [1, 2, 3] as BlockingQueue

    如果我写类似的东西def l 1 2 3 as Socket这显然是无稽之谈 我明白了 org codehaus groovy runtime typehandling GroovyCastException Cannot cast obj
  • 创建子类别选择框 onChange

    我正在创建一个类别系统 用户可以从数据库中选择类别 选择后会创建另一个包含该类别子类别的选择框 所以 我的问题是我怎样才能最好地做到这一点 顺便说一句 我正在使用 Laravel 框架 第一类很简单
  • dataGridView默认错误对话框句柄

    我试图隐藏默认的 datagridview 错误对话框 我将这个事件处理程序的代码放入其中 this dataGridView2 DataError new System Windows Forms DataGridViewDataErro
  • Rails 与 bin/rails 之间有什么区别?

    作为大一新生 我遇到了许多不清楚的细节 其中之一是bin 事物 我一直想知道以下之间有什么区别 rails generate and bin rails generate 当我在控制台中运行这些命令时 它们的行为似乎相同 还有rake an
  • 使用 Drools Workbench 和 KIE 服务器的 HelloWorld

    将 KIE Drools Workbench 6 2 0 Final 安装在 JBoss 7 Application Server 本地实例中 将 Kie Server 6 2 0 Final 安装在本地 Tomcat 7 实例中 严格使用
  • 测试 WCF Web 服务?

    我想为 WCF 服务创建一个测试类 我相信 嘲笑 是正确的术语 我不太确定我认为我必须这样做的方式是正确的方式 我已获得 WCF 服务的 URL 例如 http somesite com wcf RealService svc And ht
  • iOS:如何使用 Quartz 测量字符串的宽度和高度?

    在我提出问题之前 这是来自 Apple 的文档 如何使用 Quartz 确定字符串的宽度 如果文本测量对您的应用很重要 那么可以 使用 Quartz 2D 函数计算它们 但是 您可能首先 考虑使用 ATSUI 其优势在于文本布局和 测量 A