标签: core-text

CTFramesetterSuggestFrameSizeWithConstraints有时返回不正确的大小?

在下面的代码中,CTFramesetterSuggestFrameSizeWithConstraints有时返回一个CGSize高度不足以包含传递给它的所有文本的高度.我确实看过这个答案.但在我的情况下,文本框的宽度需要是恒定的.有没有其他/更好的方法来确定我的属性字符串的正确高度?谢谢!

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attributedString);
CGSize tmpSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetter, CFRangeMake(0,0), NULL, CGSizeMake(self.view.bounds.size.width, CGFLOAT_MAX), NULL); 
CGSize textBoxSize = CGSizeMake((int)tmpSize.width + 1, (int)tmpSize.height + 1);
Run Code Online (Sandbox Code Playgroud)

iphone xcode core-graphics core-text

12
推荐指数
2
解决办法
1万
查看次数

文本渲染iOS - 呈现快速更改文本的最高效方式

在iOS中呈现快速更改文本(10-15个数字可以改变每一帧)的最高效的方法是什么?这些是我到目前为止所做的尝试:

1)CATextLayer+ CTFontNSString:相当快,但无法访问我需要的字距调整.(如果有人知道如何使用CTFont和不使用kerning的技巧NSAttributedString,这也很酷,但这不是主要问题;))

2)CATextLayer+ NSAttributedString:缓慢且滞后.与1)相比,我看到了巨大的FPS下降.在我的应用程序中,此更改使FPS从50-60降至30.

3)位图字体,使用UIImageViewsUIImage显示数字:虽然不是很令人满意,但是在iOS中应该有更好的方式/更自然的方式来有效地渲染字体.

编辑:

4)UILabel+ NSString- 相当快,但再次无法访问字距.

5)UILabel+ NSAttributedString- 再次缓慢而迟缓.

渲染NSAttributedStringa比渲染基本要慢得多NSString.这真是令人沮丧,因为我现在需要NSAttributedString的只是字母之间的间距.

performance objective-c nsattributedstring core-text ios

12
推荐指数
1
解决办法
1357
查看次数

如何使用Core Text和Attributed String伪造上标和下标?

我正在使用a NSMutableAttribtuedString来构建带有格式的字符串,然后我将其传递给Core Text以渲染到框架中.问题是,我需要使用上标和下标.除非这些字符在字体中可用(大多数字体不支持它),否则设置属性kCTSuperscriptAttributeName什么都不做.

所以我想我只留下了唯一的选择,即通过改变字体大小和移动基线来伪造它.我可以做字体大小位,但不知道改变基线的代码.有人可以帮忙吗?

谢谢!

编辑:我正在考虑,考虑到我可以用来解决这个问题的时间,编辑一个字体,以便给它一个下标"2"......或者找到一个内置的iPad字体.有没有人知道任何带有下标"2"的衬线字体我可以使用?

objective-c subscript nsattributedstring ipad core-text

11
推荐指数
2
解决办法
4457
查看次数

核心文本与UITextView文本格式完全相同?

我正试图在iPad中设置一个CTFrame与我UITextView的文本格式完全匹配的文件.首先,我将UITextView文本转换为属性字符串.然后我设置了绘图框的宽度和高度,其中Core Text将绘制文本.我成功地使用Core Text绘制文本,但UITextViewCore Text显示略有不同的结果,即使我使用相同的字体和大小.具体来说,当我使用时[UIFont systemFontOfSize:21],每个空格中的UITextView像素比Core Text的结果多一个像素.

对于短句或单词是可以的,但如果UITextView和Core Text有多行,则它们的结果会变得非常不同.例如,UITextView对行尾的一个单词执行自动换行,而Core Text将该单词保留在同一行.如果你看到附图,最后一个单词"段落"的起始位置已经非常不同了(由于8个空格字符,8个像素的间隙).

更糟糕的是,如果我使用不同的字体,例如添加到我的项目中的自定义字体,则每个字符都会UITextView有1个像素.

我正在使用Core Text来查找当前光标的像素位置UITextView,因此它们彼此完全匹配,每行包含相同数量的字符和单词.

问题:有没有办法使Core Text对象与UITextView的文本格式完全匹配?

谢谢!

这是我如何设置属性字符串的代码.(我刚刚关注了Core Text Guide.)

CTFontRef font = CTFontCreateWithName((CFStringRef) [UIFont systemFontOfSize:21.0].fontName, 21.0, NULL);
CFMutableAttributedStringRef attrString2 = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0);
CFAttributedStringReplaceString (attrString2, CFRangeMake(0, 0), (CFStringRef) string);
CFAttributedStringSetAttribute(attrString2, CFRangeMake(0, [string length]),kCTFontAttributeName, font);
Run Code Online (Sandbox Code Playgroud)

-

-

这是一张照片.

替代文字

iphone uitextview ipad core-text ios

11
推荐指数
1
解决办法
4198
查看次数

当其框架与UIView相交时,反向UIlabel文本颜色

嗨我试图在标签矩形与UIView相交的情况下改变UILabel的文本颜色,我想也许有一个属性或我可以使用的东西.如下图所示:

在此输入图像描述

有人之前遇到过这个问题,或者我应该阅读什么才能开始做这件事?

提前致谢

iphone core-graphics ipad core-text ios

11
推荐指数
1
解决办法
1837
查看次数

NSAttributedString - 获取字体属性

我需要获取有关我的属性字符串的信息,但无法弄清楚如何.我收到这本词典:

2013-11-04 18:06:10.628 App[1895:60b] {
    NSColor = "UIDeviceWhiteColorSpace 0.3 1";
    NSFont = "<UICTFont: 0x17d8d4c0> font-family: \".HelveticaNeueInterface-MediumP4\"; font-weight: bold; font-style: normal; font-size: 17.00pt";
    NSUnderline = 0;
}
Run Code Online (Sandbox Code Playgroud)

通过以下方式检查下划线很容易:

[attrs objectForKey:@"NSUnderline"]
Run Code Online (Sandbox Code Playgroud)

但是如何获取有关字体的信息,如字体样式,字体重量等.

谢谢你的帮助

objective-c core-text ios

11
推荐指数
1
解决办法
2万
查看次数

iPhone CoreText:查找子字符串的像素坐标

这是Twitter应用程序的屏幕截图供参考:http://screencast.com/t/YmFmYmI4M

我想要做的是在NSAttributedString中的子字符串顶部放置一个浮动弹出窗口,该字符串可以跨越多行.NSAttributedString是项目的要求.

在提供的屏幕截图中,您可以看到链接是背景突出显示的,因此它让我相信他们正在使用CoreText和NSAttributedStrings.我还找到了一个名为CTRunRef(http://developer.apple.com/library/ios/#documentation/Carbon/Reference/CTRunRef/Reference/reference.html)的东西看起来很有前景,但我很难将它们整合在一起概念.

简而言之,如果我在核心文本中有一个段落,当我点击一个单词时,如何找到该单词的边界框?

iphone substring nsattributedstring core-text ios4

10
推荐指数
1
解决办法
3968
查看次数

核心文本比NSString drawInRect小一点:?

从理论上讲,这些应该是相同的大小,但它们不是:

蓝色文本来自Core Text,黑色来自-[NSString drawInRect:].这是代码:

//Some formatting to get the correct frame
int y = MESSAGE_FRAME.origin.y + 8;

    if (month) y = y + 27;

    int height = [JHomeViewCellContentView heightOfMessage:self.entry.message];

    CGRect rect = CGRectMake(MESSAGE_FRAME.origin.x + 8, y, MESSAGE_FRAME.size.width - 16, height);


    //Draw in rect method
    UIFont *font = [UIFont fontWithName:@"Crimson" size:15.0f];

    [[UIColor colorWithWhite:0.2 alpha:1.0] setFill];

    [self.entry.message drawInRect:rect withFont:font lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentLeft];



    //Frame change to suit CoreText
    CGRect rect2 = CGRectMake(MESSAGE_FRAME.origin.x + 8, self.bounds.size.height - y - height, MESSAGE_FRAME.size.width - 16, …
Run Code Online (Sandbox Code Playgroud)

core-graphics objective-c core-text ios

10
推荐指数
1
解决办法
1635
查看次数

如何阻止UILabel在每次增量时调整大小?

我的应用程序中有一个秒表功能,使用居中UILabel的比例间距字体来渲染时间.每次增加标签的宽度都会发生变化,从而产生一种在快速速度下看起来特别糟糕的弹跳效果.这是一个例子.

我怎样才能解决这个问题?

iOS 9更新

它现在是一个单行:

UIFont.monospacedDigitSystemFontOfSize(17, weight: UIFontWeightRegular)
Run Code Online (Sandbox Code Playgroud)

此外,我上次尝试时,下面的解决方案不适用于iOS 9.浪费了相当多的时间调试之前在标题中遇到这个问题.

在iOS 7中使用Text Kit变得微不足道.

确保导入Core Text:

#import <CoreText/CoreText.h>
Run Code Online (Sandbox Code Playgroud)

创建一个将比例数转换为等宽数字的设置:

NSArray *monospacedSetting = @[@{UIFontFeatureTypeIdentifierKey: @(kNumberSpacingType),
                                 UIFontFeatureSelectorIdentifierKey: @(kMonospacedNumbersSelector)}];
Run Code Online (Sandbox Code Playgroud)

通过附加当前使用的字体描述符来创建新的字体描述符UILabel:

UIFontDescriptor *newDescriptor = [[timeLabel.font fontDescriptor] fontDescriptorByAddingAttributes:@{UIFontDescriptorFeatureSettingsAttribute: monospacedSetting}];
Run Code Online (Sandbox Code Playgroud)

更新标签的字体:

// Size 0 to use previously set font size
timeLabel.font = [UIFont fontWithDescriptor:newDescriptor size:0];
Run Code Online (Sandbox Code Playgroud)

objective-c nsstring nsattributedstring core-text swift

10
推荐指数
1
解决办法
1585
查看次数

如何在Swift中将UIFont对象强制转换为CTFont

我正在尝试将一些代码移植到使用UIFont和的Swift CTFont,并且(成功地,在Objective-C中)使用简单的桥接转换来从一个转换到另一个,反之亦然.

例如,考虑此代码(在UIFontDescriptor类别中):

UIFont *font = [UIFont fontWithDescriptor:self size:0.0];
NSArray *features = CFBridgingRelease(CTFontCopyFeatures((__bridge CTFontRef)font));
Run Code Online (Sandbox Code Playgroud)

我还没有弄清楚如何以一种实际编译的方式在Swift中表达这一点.以下至少不会:

let font = UIFont(descriptor:self, size: 0.0)
let features = CTFontCopyFeatures(font as CTFont)
Run Code Online (Sandbox Code Playgroud)

错误:'UIFont'无法转换为'CTFont'

uikit core-text swift

10
推荐指数
1
解决办法
2493
查看次数