问题标签 [nslayoutmanager]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2363 浏览

iphone - 使用 NSLayoutManager 计算每个字形的帧数

在这个线程上,Core Text 计算 iOS 中的字母框架,他们能够使用 Core Text 非常精确地计算每个字形的框架。最后的矩形完美地拥抱实际绘制的字形。

使用 NSLayoutManagerboundingRectForGlyphRange:inTextContainer:似乎并不能准确地返回字形边界框:

使用 boundingRectForGlyphRange:inTextContainer 的字形框架

并且返回的矩形没有完全包含更复杂的字体(Zapfino 示例):

Zapfino f 字形使用 boundingRectForGlyphRange:inTextContainer

有谁知道如何复制上述讨论的结果而无需进入仅 iOS 7 应用程序下的 Core Text?

谢谢。

0 投票
1 回答
1901 浏览

ios - 具有大 NSAttributedString 的 UItextView 的滚动性能问题

我正在为应用程序开发文本编辑器。我正在使用 UITextView

请参阅示例代码以加载文本视图。

文本大小约为 400k 字。

我面临以下问题。

  • 当我向下滚动时,文本滚动变得太慢,有时应用程序由于内存问题而崩溃。我认为iOS在向下滚动textview时将渲染的文本图像保存在其内存中,但是当我向上滚动到顶部时它会释放内存。

  • 如果我点击“全选”,则选择文本需要花费太多时间,并且在文本选择后滚动变得很差,并且有时应用程序由于内存问题而崩溃,因为它的内存增加了。我认为 iOS 在其内存中生成完整文本的图像(好像它对用户可见),然后选择完整的文本并保留其图像,直到选择完成。选择完成后,应用程序会保留内存。

显示大文本的另一种方法是使用多个文本视图并将文本分配给仅像 UITableView 这样的可见文本视图,但这会增加复杂性,因为我必须重新计算 UItextView 的 layoutManager 的每个 textChanged 委托调用所需的文本视图数量.

任何人都知道如何在 UITextView 中以更好的性能显示大型属性文本。

猜猜 iPages 应用程序是如何工作的,因为它会在区域处于可见范围内时显示文本。

0 投票
1 回答
254 浏览

ios7 - 如何插入额外的字形?

我想要一个 UITextView 在两种显示模式之间切换。在模式 1 中,它应该显示缩写,在模式 2 中应该显示完整的单词。例如“Abbr”。与“缩写”。

最好的方法是什么?请记住,某些单词可以具有相同的缩写,并且用户可以自由输入完整的单词或缩写?

到目前为止,我试图继承 NSLayoutManager。假设我得到一个缩写字符串并且我必须绘制完整的单词,我将实现以下方法:

}

但是,当我尝试插入 4 个额外的字形时,此方法会抱怨无效的字形索引“_NSGlyphTreeInsertGlyphs 无效字符索引”。

0 投票
0 回答
263 浏览

ios7 - 如何在ios7中更改NSAttributedString的字体大小

我已将 a 加载NSAttributedstringUITextview. 该字符串包含具有不同字体大小的文本。我想使用 UISlider. 所以我试图相应地增加字体大小。我可以为 设置特定的字体大小attributedString,但我需要动态更改

0 投票
0 回答
541 浏览

list - 在 NSTextLayout 上隐藏字形

我有一个带有自定义 NSTextLayout 的 UITextView:

VPLayoutManager.h

VPLayoutManager.m

这段代码隐藏了字形,但 UITextView 仍然可以看到字形(光标仍然“显示”该位置有一个字形,即使现在不可见)......所以问题是:我如何完全隐藏一个字形?

我正在尝试根据段落开头的字符创建列表,其想法是添加一个 unicode 来标识该段落是否是列表的一部分,并在 NSTextLayout 中隐藏此 unicode 并为“绘制”列表。

0 投票
1 回答
3190 浏览

ios - 从 UITextView 和 NSLayoutManager 获取行信息

为了支持该UIAccessibilityReadingContent协议,我需要我的 UITextView 来回答我关于它的线路的问题。这些是我需要实现的协议方法:

  • accessibilityLineNumberForPoint:<- 提供坐标,返回行号
  • accessibilityContentForLineNumber:<- 返回给定行的文本
  • accessibilityFrameForLineNumber:<- 给定一个行号,返回它的帧
  • accessibilityPageContent<- 整个文本内容。我有。:)

我认为 NSLayoutManager 可以帮助我,但我对它没有那么有经验。我已经弄清楚了一些(我认为),但仍然需要一些帮助。

苹果有一些示例代码(这里)可以让我知道文本视图中的行数:

我认为有了lineRange上面,我可以使用这种方法计算直线NSLayoutManager

并且鉴于lineRanges我应该能够使用(通过查找lineRange包含字形索引的点来计算点的行号:

NSString那么剩下的就是,在给定行号的情况下,我如何获取行的内容(作为)?

0 投票
2 回答
3474 浏览

ios7 - iOS 7 UITextView:重新打开应用程序后,nstextattachment 的大小变为 2 倍

我正在使用 ios7 中的 Text Kit 构建一个笔记编辑器。早些时候,我在渲染自定义大小的 NSTextAttachment 时遇到了麻烦,因为它在很大程度上减慢了渲染速度。我通过缩放图像然后将它们添加到 textview 解决了这个问题。你可以在 iOS 7.0 UITextView 中找到我的答案,之后变得非常慢向其中添加图像 缩放图像后,textview 渲染运行良好,没有任何延迟。textview 的属性文本存储在核心数据中。在应用程序的运行会话期间,textview 正确显示图像。即使在核心数据中保存属性文本并检索它之后再次显示在 textview 上,图像看起来很好。但是在杀死应用程序并再次运行应用程序后。图像放大到 2 倍大小。在缩放图像时,我使用以下函数并使用 [[UIScreen bounds] scale] 来维护图像质量。

如果我将图像缩放到 1.0,图像不会扩展,但图像质量非常差。

我认为问题出在哪里? 问题在于布局管理器。

我尝试过 的我尝试将 NSLayoutManager 子类化并覆盖 - (void)drawGlyphsForGlyphRange:(NSRange)glyphsToShow atPoint:(CGPoint)origin 我看到的是在运行应用程序的新会话时附件大小加倍。如果我尝试检查附件的大小并调整它的大小。滞后又开始了。我很早就被这个问题困扰了。任何建议都将不胜感激。在此处输入图像描述 在此处输入图像描述

0 投票
1 回答
1087 浏览

ios - NSLayoutManager 可以在后台线程上安全使用吗?

即使 iOS 文档说:

NLayoutManager、NSTextStorage 和 NSTextContainer 可以从子线程访问,只要应用程序保证从单个线程访问即可。

我偶尔会遇到这个异常:

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“仅在主线程上运行!”

这是回溯:

需要注意的一件事是 myNLayoutManager附加到UITextView. 您可以将其视为UITextView用于在后台线程中进行文本布局的普通方法。

那么这是否意味着与文档所说的相矛盾,NLayoutManager如果它附加到单个后台线程,则不能安全地使用它UITextView

0 投票
1 回答
670 浏览

ios7 - iOS7使用行间距输入UITextView并使用TextKit保持格式化

我遇到了这个很好的例子,它帮助我理解了如何在使用 iOS7 在 UITextView 中键入时实现行间距/段落间距,但是有一个问题,我希望有人可以帮助我解决我仍在学习的问题关于TextKit请。

这是实际示例 https://github.com/downie/DoubleSpacedTextView

我附上了2个文件:-

1- 这是问题的视频:- http://1drv.ms/1o8Rpd2

2-这是我正在测试的项目:http: //1drv.ms/1o8RtK0

问题是当文本行之间有空行(至少 2 个空行),然后在空行内单击以激活 UITextView 并显示键盘时,文本向上移动/失去其格式。

这是我对原始版本进行了轻微修改的核心功能,它进行了格式化,它工作得很好,但当你第一次在 UITextView 内单击时它就不行了:-

你能看看我们是否可以阻止这种情况发生吗?这样文本在我们输入 UITextView 时总是被格式化。

是否有任何其他示例显示我们如何使用 TextKit 或属性文本将格式化文本(带行距)键入 UITextView?

自iOS6以来,我一直在努力解决这个问题。

谢谢,

将要

0 投票
0 回答
446 浏览

ios7 - iOS7 glyphRangeForTextContainer - 选择 UITextView 中的所有字形/所有文本范围

我试图在输入 UITextView 时实现行间距。我有这个功能,当您在 UITextView 内单击时,它似乎只为直到光标位置的所有字符呈现行距。

当您在 UITextView 内单击时,如何编写函数以确保将格式应用于所有文本范围。

glyphRangeForTextContainer 是否有等效的方法来帮助我解决这个问题?

问题与此线程有关

iOS7使用行间距输入UITextView并使用TextKit保持格式化

1- 这是问题的视频:- http://1drv.ms/1o8Rpd2

2-这是我正在测试的项目:http: //1drv.ms/1o8RtK0

谢谢你。