标签: core-text

画下划线/删除线文字(MULTILINE STRING)?

我必须使用所有类型的文本对齐绘制带下划线的多行文本.我在论坛上搜索过并获得了一些结果:

http://davidjhinson.wordpress.com/2009/11/26/underline-text-on-the-iphone/

http://forums.macrumors.com/showthread.php?t=561572

但是所有人都只为单行绘制文字.虽然我有多行文字.当文本对齐居中时,情况甚至变得更糟.我搜索并发现在iphone-sdk-3.2中有一些核心文本属性用于加下划线,但不知道如何使用它.此外,如果我使用这些,我的问题将无法完全解决.

因为我还要画出删除线文字.

有任何想法的人请帮忙.

iphone core-graphics ipad iphone-sdk-3.2 core-text

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

在不规则形状内渲染CoreText

我正在寻找有关实现视图的指导,该视图NSAttributedString在带有孔的多边形内呈现,包裹和回流文本以适合几何.这不是CoreText问题,而是将不规则形状划分为有序蹲下矩形序列的一般问题.

类似的问题尚未得到充分回答:

CoreText处理与文本布局和显示相关的令人难以置信的大量工作,所以我不禁怀疑我正在重新发明一个轮子.出于这个问题的目的,请假设我可以检查适合给定矩形的子字符串,同时考虑自动换行和连字符.

编辑:我已经决定只扫描从左到右的绘图,尽可能多地适应边界.虽然我打破了自然界限,但看起来有点随意,所以我仍然很欣赏其他应用程序如何包装文本的指导.

编辑#2:它现在看起来很不错,它支持基本的自动换行并避免渲染很短的行.我的问题一定太模糊了.谢谢你的期待.

编辑#3: Amorya指出CTFramesetter现在接受任何CGPath.

algorithm geometry text word-wrap core-text

5
推荐指数
1
解决办法
1952
查看次数

如何通过更改高亮颜色突出显示CoreText?

我有一个UIView的子类,它实现了绘制CoreText的代码.在应用程序中,UIView是在UIScrollView中绘制的.这是我目前在drawRect中使用的代码:渲染NSAttributedString:

CGContextRef context = UIGraphicsGetCurrentContext();

float viewHeight = self.bounds.size.height;
CGContextTranslateCTM(context, 0, viewHeight);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextSetTextMatrix(context, CGAffineTransformMakeScale(1.0, 1.0));

CGMutablePathRef path = CGPathCreateMutable();
CGRect bounds = CGRectMake(PADDING_LEFT, -PADDING_TOP, self.bounds.size.width-20.0, self.bounds.size.height);
CGPathAddRect(path, NULL, bounds);

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFMutableAttributedStringRef)attrString);
CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
CFRelease(framesetter);
CFRelease(path);
CTFrameDraw(frame, context);
Run Code Online (Sandbox Code Playgroud)

在我的NSAttributedString中,我有一些文本属性来为文本着色.

我需要帮助的是概念上,应该如何实现?我对所有绘制框架,图层等的各种方法感到困惑.我试图查看几本书和其他资源,但我觉得我缺少一些基本的东西.

这是我的要求:

  1. 显然需要在更改方向时将重点重新绘制到新位置.
  2. 突出显示颜色需要能够在单个突出显示的基础上以编程方式进行更改.
  3. 理想情况下,当我只更改一个高亮显示的高亮颜色时,我不想重新绘制整个CoreText UIView.
  4. 单个Rects必须能够组合在一起形成一个高光,因为高光可以覆盖超出单个CTLine的范围.
  5. 最后,我想在CoreText视图上实现UIMenuController,所以我相信必须在CoreText UIView下面绘制高光?

我非常感谢任何帮助.

这是我到目前为止所尝试的:

我添加了一个新的UIView作为UIScrollView的子视图以包含亮点.然后我为突出显示添加单独的UIViews.当我创建虚拟"测试"高亮显示时,它们在CoreText视图下正确显示.我也可以轻松改变高光颜色.但是,当我从CoreText视图获取有关线条的实际信息以创建真实高光时,它返回零线.这可能是因为drawRect还没有完成绘图还是其他什么?

以下是一些问题:

  1. 我应该将UIView作为子视图添加到UIScrollView中,以包含所有突出显示以及每个突出显示的其他子视图吗?然后,将每个高亮显示UIView存储在嵌套的NSArray中?
  2. 如果我更改CoreText UIView下方高亮的颜色,是否会重新绘制整个UIView?如果是这样,我该如何设计呢?
  3. 确实,如果我希望CoreText UIView接收UIMenuController的输入,我必须将高亮对象放在CoreText UIView下面吗?

我见过这个开源项目:

https://github.com/Cocoanetics/NSAttributedString-Additions-for-HTML

这是它能做的惊人,但比我需要的要复杂得多.代码使用CoreText呈现每个单独的字形,并允许突出显示,这很棒.但是,我试图保持我的代码简单和轻量级.我对CoreGraphics,CoreAnimation或CoreText知之甚少.

我也看到过这个问题:

核心文本 - 从NSRange获取像素坐标

该问题的答案提供了确定给定行中给定范围的Rect的边界的调用.我想我可以搞清楚这些电话.

UPDATE

这就是我现在所做的.我确定这是错的,但这是我能找到的唯一方法让它发挥作用......

  1. 创建一个UIView作为容器,作为子视图添加到UIScrollView.
  2. 将UIView传递给CoreTextView.我还将一个字符串范围数组传递给CoreTextView,以指示应突出显示哪些字符串. …

iphone core-graphics uiscrollview core-text ios

5
推荐指数
1
解决办法
2757
查看次数

使用时字距调整不良 - [NSString drawInRect:withAttributes:]

当使用 - [NSString drawInRect:withAttributes:]时,主要是在使用内置的Helvetica Neue以及其他字体时,字距调整非常糟糕.但是,当在Text Edit(使用NSTextView)中呈现相同的字符串时,字距调整很棒.考虑这两个字符串:

坏字距

很好的字距

对于小点大小,第一种情况(在Cocoa中呈现)几乎难以辨认,而第二种情况(来自文本编辑)要好得多.我认为这里根本没有使用字距调整信息.如果我应用值为0.0的NSKernAttribute(根据文档关闭字距调整),我得到相同的结果,顶部的那个.

我也尝试过使用带有CTLineDraw的Core Text,但仍然有很糟糕的字距.所以我的问题是,在Cocoa文本系统中启用字距调整是否需要做些什么?如果没有,NSTextView如何应用字距调整?

cocoa objective-c core-text

5
推荐指数
1
解决办法
825
查看次数

CoreText字体在透明背景上平滑

我正在尝试在(半)透明背景上使用CoreText(appkit版本)进行渲染,因此边缘不平滑.

在网上搜索表明没有解决这个问题的方法,但是我不相信它,因为一个简单的观察:如果我创建一个包含相同字符串的CATextLayer,那么字体是可爱和流畅的.

我已经尝试将各种"允许"设置设置为true,然后完成它们提供的16种可能性.有些人比其他人好,这是我到目前为止所做的:

        CGContextSetAllowsAntialiasing(context, YES);
        CGContextSetAllowsFontSmoothing(context, YES);
        CGContextSetAllowsFontSubpixelPositioning(context, YES);
        CGContextSetAllowsFontSubpixelQuantization(context, YES);

        CGContextSetShouldAntialias(context, YES);
        CGContextSetShouldSmoothFonts(context, NO);
        CGContextSetShouldSubpixelPositionFonts(context, YES);
        CGContextSetShouldSubpixelQuantizeFonts(context, YES);
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何获得CATextLayer获得的相同结果吗?

cocoa appkit core-text

5
推荐指数
0
解决办法
425
查看次数

iOS:UILabel字符串中特定文本的CGRect

我想知道字符串在rect中绘制后将是什么帧.

NSString *string = @"This is a sample text.";
UILabel *label = [[UILabel alloc] init];
label.text = string;
// do some setups here
Run Code Online (Sandbox Code Playgroud)

drawInRect:方法中,我想检索特定单词的框架.假设我想知道sample来自This is a sample text.字符串的矩形.

这是一个示例UILabel,我想知道红框内文本的框架.谢谢!

在此输入图像描述

nsstring uilabel core-text ios

5
推荐指数
1
解决办法
2178
查看次数

ShowTextAtPoint的CoreText方法(float x,float y,string text)MonoTouch

我正在使用折旧的ShowTextAtPoint方法更新iOS 7的应用程序,似乎无法找到使用CoreText而不是ShowTextAtPoint的正确方法.

c# cgcontext xamarin.ios core-text xamarin

5
推荐指数
0
解决办法
228
查看次数

实现后的DTCoreText错误消息

我试图实现DTCoreText.我按照本指南并将其实现为git submodul,但现在我在尝试运行我的应用程序时遇到错误.在片刻,我没有使用DTCoreText进行任何编码.我只是想测试我的应用程序是否适用于新导入的数据......但它没有!

我收到一个警告:

Static Library was rejected as an implicit dependency for 'libDTCoreText.a' because its architectures 'armv7s' didn't contain all required architectures 'armv7'
Run Code Online (Sandbox Code Playgroud)

在我看来,警告后出现以下错误的原因:

Apple Mach-O Linker Error:  no such file or directory: '/Users/-------------/Build/Products/Debug-iphoneos/libDTCoreText.a'
Run Code Online (Sandbox Code Playgroud)

我没有忘记在" Link Binary With Libraries "中实现libDTCoreText.a ,但它总是红色的?这可能是问题吗?

objective-c core-text ios dtcoretext

5
推荐指数
1
解决办法
467
查看次数

将UILabel/UITextField放在下一行而不是推出视图

我正在创建一种自然语言形式,每当用户输入相当大的输入时,我希望整行都移动到下一行(就像一个UITextView).现在,我得到了这个结果:http://cl.ly/image/1E1n0W28360T

这表明存在两个明显的问题:一个:UITextField正在推动的元素应该转到下一行,其次,当向后间隔时,被"推开"的元素不会被"推回"到位.此外,UITextField退出时应该移动到下一行view.bounds.是否最好使用a UITextFieldUITextViewfor 是任意的.它应该适用于图2中的情况.

这是我想要实现的更具图形化的方法: 在此输入图像描述

我该如何解决这个问题?这是正确的方法吗?

更新

罗伯特的答案是非常好的,除了它仍然存在的一些错误之外还有一个问题,即它不灵活.我已经开始重构代码并尝试按照Robert的方法对a UITextField和a 进行子类化UITextView.

当继承代码,需要有一些代表团的UITextFieldUITextView.其次,句子的每个部分都需要UITextField在中间存在时进行分割,但我觉得这也可以硬编码到VC中.约束也需要转换为代码.

每当我得到所有这些问题中的任何一个的解决方案时,我都会更新问题并希望获得灵活的解决方案:)

cocoa-touch objective-c uitextfield core-text textkit

5
推荐指数
1
解决办法
598
查看次数

如何使用不同的字体在NSAttributedString中垂直居中一行?

我有一个NSAttributedString"表"使用NSTextTab停止,其中第一列是KEY,第二列是值

像这样:

|  **KEY 1**|value1|
|**KEY TWO**|value2|
Run Code Online (Sandbox Code Playgroud)

KEYS的字体大小/重量不同+全部大写.行对齐,以便所有字母的底部匹配.我想垂直微调这些值,使它们看起来与KEYS垂直居中.

有没有办法做到这一点?这似乎非常专业,但从设计的角度来看,我认为它看起来会更好

objective-c nsattributedstring core-text ios nsparagraphstyle

5
推荐指数
1
解决办法
2761
查看次数