天道酬勤,学无止境

core-text

Finding text's bounding rect in Core Text

I'm trying to find the boundaries of a line of text in Core Text. For simplicity, assume it has a single character. At the moment I'm using the following method: line = CTLineCreateWithAttributedString(attrString); rect = CTLineGetImageBounds(line, context); It works most of the times, but for some characters, like math italic d (Unicode: 0x1D451) or math italic q (Unicode: 0x1D45E), the width is a bit short. I tried using CTLineGetTypographicBounds() or CTFramesetterSuggestFrameSizeWithConstraints, but they didn't help either (I think they use glyph's advance to find the width, not its

2021-06-14 14:17:01    分类:问答    cocoa   cocoa-touch   macos   core-text

CATextLayer wrapped sizeToFit?

If I set textLayer.wrapped = YES, how do I resize textLayer to contain the wrapped text? I.e., how do I get the new height of the textLayer? Basically, I want something like -[UILabel sizeToFit].

2021-06-14 07:16:08    分类:问答    core-animation   uilabel   core-text   catextlayer   sizetofit

Swift - Playground - 核心图形/核心文本/自定义视图(Swift - Playground - Core Graphics / Core Text / Custom View)

问题 问题 我正在尝试在 swift playground 中制作自定义 UIView 组件。 除了正确渲染文本之外,我已经能够弄清楚如何做所有事情。 我不确定我是否应该通过 Core Graphics 或 Core Text 来做到这一点,或者究竟如何让它正常工作。 如下图所示,我想在自定义视图组件的任一侧呈现上下颠倒和正面朝上的文本 我尝试了各种方法来让文本正常工作,但我一直搁浅。 如果有人能够向我展示如何修改我的操场以添加一些文本渲染,那将是非常棒的。 游乐场代码 // Playground - noun: a place where people can play import Foundation import UIKit class RunwayView : UIView { var northText : String? var southText : String? ///Draws the "runway" override func drawRect(rect: CGRect) { // Setup graphics context var ctx = UIGraphicsGetCurrentContext() // clear context CGContextClearRect(ctx, rect) let parentVieBounds = self

2021-06-12 21:17:49    分类:技术分享    ios   xcode   swift   core-graphics   core-text

NSLayoutManager: Calling setLocation(_:forStartOfGlyphRange:) disables kerning in the whole string?

I created simple NSLayoutManager subclass that allows to set custom layout location for defined substrings: class PositionableLayoutManager: NSLayoutManager { var xOffsetsPerGlyphRange = [(NSRange, CGPoint)]() override func invalidateLayoutForCharacterRange(charRange: NSRange, actualCharacterRange actualCharRange: NSRangePointer) { super.invalidateLayoutForCharacterRange(charRange, actualCharacterRange: actualCharRange) for (range, offset) in xOffsetsPerGlyphRange { setLocation(offset, forStartOfGlyphRange: range) } } } Now, I can define custom location of any character range like this: let

2021-06-12 16:52:18    分类:问答    ios   swift   text   core-text   nslayoutmanager

Problem while using CTFontRef in a loop to create NSMutableAttributedString

I need to create a NSMutableAttributedString with different CTFontRef and CTParagraphStyleRef for different range in that string. I try creating it by putting the following code in a loop and change range as I need, CTFontRef normalFontRef = CTFontCreateWithName((CFStringRef)@"CourierNewPSMT", fontsize, NULL); NSDictionary* normalFontAttribute = [[NSDictionary alloc] initWithObjectsAndKeys:(id)normalFontRef,(NSString*)kCTFontAttributeName, nil]; [attributedString addAttributes:normalFontAttribute range:range]; CFRelease(normalFontRef); [normalFontAttribute release]; normalFontAttribute = nil

2021-06-12 10:48:43    分类:问答    iphone   ipad   crash   core-text

Swift:在 CFArray 中提取/向下转换基于 CFType 的 CoreText 类型(Swift: Extracting / downcasting CFType based CoreText types in a CFArray)

问题 我正在尝试将 CoreAnimationText 示例的元素移植到 Swift。 但是,我无法弄清楚如何从数组中提取或向下转换 CTRun 的元素,以便将它们传递给期望并根据 Swift-ified CTRun 类型执行的函数。 我要么从下面的操场片段中收到运行时错误或链接错误 import CoreText import QuartzCore let text = NSAttributedString(string: "hello") var line: CTLine = CTLineCreateWithAttributedString(text) var ctRuns:CFArray = CTLineGetGlyphRuns(line) let nsRuns:Array<AnyObject> = ctRuns as NSArray nsRuns.count // == 1 // Playground execution failed: error: error: Couldn't lookup symbols:_OBJC_CLASS_$_CTRun let nsRun = nsRuns[0] as CTRun nsRun.self println(nsRun.self) let anyRuns = nsRuns as AnyObject[] // can't unwrap

2021-06-12 05:56:41    分类:技术分享    ios   macos   swift   core-text   core-foundation

iOS:根据大小找到适合 UILabel 的正确字体大小(iOS: finding correct font size to fit in a UILabel depending on its size)

问题 我有一个UILabel其属性text我想将文本段落设置为使用NSString 。 我有一个数组,其中存储了代表文本段落的字符序列。 该段落不必完全适合/包含在此UILabel 。 如果段落没有结束,我将转到下一个标签。 假设我有这个UILabel 160 X 240 的矩形大小,我怎么能确定正确的字体大小以便很好地填充UILabel这个字符串? 是否有根据屏幕上矩形大小计算字体大小的数学方法? 例如: UILabel *aLabel = [[UIlabel alloc] initwithFrame(CGRect){{0, 0}, 160, 240}]; aLabel.font = [UIFont fontWithName:@"Courier New" size:<???>]; //(font unit in points) NSMutableString *aString = [[NSMutableString alloc] init]; //The following tries to fit the character one by one within the label rect based on //the width and height of the UILabel by appending String int index = 0; for(int x = 0

2021-06-11 13:19:08    分类:技术分享    ios   nsstring   core-text   uifont

How to get emoji path in iOS

My purpose : Draw outline of every glyph example1: input: text= "666棒" display: Attach:In the figure above, 1 is displayView,2 is inputView. example2: input: text= "666😁棒" display: Attach: In the figure above, 1 is displayView,2 is inputView,3 is nothing rendered. Main ideas is : Use CoreText obtained every CGglyph. Get every glyph's CGPath Use CAShapeLayer display the glyph on screen. Main method: let letters = CGMutablePath() let font = CTFontCreateWithName(fontName as CFString?, fontSize, nil) let attrString = NSAttributedString(string: text, attributes: [kCTFontAttributeName as String

2021-06-10 23:18:20    分类:问答    ios   swift   uibezierpath   core-text

CGContextSelectFont 等效(CGContextSelectFont equivalent)

问题 在 iOS7 CGContextSelectFont 已弃用。 弃用消息说我必须使用 Core Text,但我不知道哪一段代码完全等效: CGContextSelectFont(context, "Helvetica", kBarLabelSize, kCGEncodingMacRoman); CGContextSetTextDrawingMode(context, kCGTextFill); CGContextSetRGBFillColor(context, 0, 0, 0, 1.0); CGContextSetTextMatrix (context, CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0)); CGContextShowTextAtPoint(context, barX, barY, [@"Some text" cStringUsingEncoding:NSUTF8StringEncoding], [barValue length]); 我已经能够使用以下代码创建字体: CFMutableAttributedStringRef attrStr = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0); CTFontRef font =

2021-06-10 19:36:59    分类:技术分享    iphone   objective-c   ios7   core-text

OpenGLES 2(iOS - CoreText?)中的文本/字体渲染 - 选项和最佳实践?(Text/font rendering in OpenGLES 2 (iOS - CoreText?) - options and best practice?)

问题 关于 OpenGL 字体渲染有很多问题,其中很多都可以通过纹理图集(快速,但错误)或字符串纹理(仅限固定文本)来满足。 然而,这些方法很差,而且似乎已经过时了很多年(如何使用着色器来更好/更快地做到这一点?)。 对于 OpenGL 4.1,有一个很好的问题是关于“你今天应该使用什么?”: 从 4.1 版开始,OpenGL 中文本渲染的最新技术是什么? 那么,我们今天应该在 iOS GL ES 2 上使用什么? 我很失望似乎没有开源(甚至商业解决方案)。 我知道很多团队都把它搞砸了,花了数周的开发时间重新发明这个轮子,逐渐学习如何调整字距和空格等(呃)——但必须有比重写整个“字体”更好的方法从头开始? 据我所知,这有两个部分: 我们如何使用字体渲染文本? 我们如何显示输出? 对于 1(如何渲染),Apple 提供了许多方法来获得“正确”的渲染输出 - 但“简单”的方法不支持 OpenGL(也许其他一些支持 - 例如,是否有一种简单的方法来映射 CoreText 输出OpenGL?)。 对于 2(如何显示),我们有着色器、VBO、字形纹理、查找纹理和其他技术(例如上面链接的 OpenGL 4.1 内容?) 以下是我所知道的两种常见的 OpenGL 方法: 纹理图集(渲染所有字形一次,然后从共享纹理为每个字符渲染 1 x 纹理四边形) 这是错误的,除非您使用的是 1980 年代的

2021-06-10 17:30:58    分类:技术分享    ios   opengl-es   fonts   core-animation   core-text