核心文本 – CoreText.如何计算定义的字符串的边界框?

核心文本 – CoreText.如何计算定义的字符串的边界框?,第1张

概述在CoreText中,很容易问:“给定的矩形有多少这个归因的字符串将适合?” CTFrameGetVisibleStringRange(rect).length 将返回字符串中的下一个文本应该开始的位置. 我的问题是:“给定一个归因的字符串和一个宽度,我需要什么rect height来完全绑定归因的字符串?” CoreText框架是否提供了这样的工具? 谢谢, 道格 你需要的是 CTFramese 在CoreText中,很容易问:“给定的矩形有多少这个归因的字符串将适合?”
CTFrameGetVisibleStringRange(rect).length

将返回字符串中的下一个文本应该开始的位置.

我的问题是:“给定一个归因的字符串和一个宽度,我需要什么rect height来完全绑定归因的字符串?”

CoreText框架是否提供了这样的工具?

谢谢,
道格

解决方法 你需要的是 CTFramesetterSuggestFrameSizeWithConstraints(),你可以这样使用它:
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((__brIDge CFAttributedStringRef)(attributedString)); /*Create your framesetter based in you NSAttrinbutedString*/CGfloat wIDthConstraint = 500; // Your wIDth constraint,using 500 as an exampleCGSize suggestedSize = CTFramesetterSuggestFrameSizeWithConstraints(   framesetter,/* Framesetter */   CFRangeMake(0,text.length),/* String range (entire string) */   NulL,/* Frame attributes */   CGSizeMake(wIDthConstraint,CGfloat_MAX),/* Constraints (CGfloat_MAX indicates unconstrained) */   NulL /* Gives the range of string that fits into the constraints,doesn't matter in your situation */);CGfloat suggestedHeight = suggestedSize.height;

编辑

//important: Release the framesetter,even with ARC enabled!CFRelease(frameSetter);

As ARC releases only Objective-C objects和CoreText处理C,很有可能在这里有一个内存泄漏.如果你的NSAttributedString很小,你做了一次,你不应该有任何不良后果.但是在一个例子中,你有一个循环可以计算出来,大概/复杂的NSAttributedStrings的高度是50个高度,你不会释放CTFramesetterRef,你可以有严重的内存泄漏.检查链接的教程,了解有关内存泄漏和仪器调试的更多信息.

所以解决这个问题的方法是添加CFRelease(frameSetter);

总结

以上是内存溢出为你收集整理的核心文本 – CoreText.如何计算定义的字符串的边界框?全部内容,希望文章能够帮你解决核心文本 – CoreText.如何计算定义的字符串的边界框?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1110991.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存