问题标签 [nstextstorage]

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 投票
0 回答
270 浏览

cocoa - 如何清除 NSLayoutManager.drawGlyphsForGlyphRange(...) 的效果?

我有一个NSView元素被重用,主要用于绘制不同的文本,因为它们在NSScrollView. 我正在使用三重奏NSTextStorage, NSLayoutManager and NSTextContainer来显示文本,以下是在 drawRect 方法中绘制文本的调用:

我所看到的是,在连续调用drawRect它时,将要在旧文本之上绘制的新文本覆盖在视觉上有效地创建一大堆文本。

清除上次调用 drawRect 时绘制的文本的最佳方法是什么,特别是考虑到滚动性能:

NSRectFillA)在绘制文本之前调用drawRect- 这有效地绘制了先前的文本并且非常简单。在每个卷轴上一遍又一遍地绘制相同的背景似乎很浪费。

B)调查NSView.prepareForReuse()- 这种方法似乎更适合您想要“擦除”现有对象的全部内容以重用并从不同状态开始的场景。在我的场景中,这只是NSLayoutManager我想要删除的之前写的文本。

C)其他一些方法?

0 投票
1 回答
861 浏览

cocoa - 如何使用 NSLayoutManager 在 CALayer 中呈现文本?

我正在使用三重奏NSLayoutManager, NSTextStorage & NSTextContainer在 layer-backed 中呈现文本NSView

我的印象是,如果我可以覆盖wantsUpdateLayer以返回 true 并因此更充分地使用图层,则视图将具有更高的性能。这是真的?

但是,我看到的所有使用示例NSLayoutManager都说您需要将以下调用置于drawRect

您将如何在内部updateLayer或其他更面向层的地方执行等效调用?

0 投票
1 回答
75 浏览

cocoa - Where can I find some documentation on NSTextStorage editedMask?

The NSTextStorage documentation mentions the editedMask which according to the docs:

However, I cannot seem to find any bit flags for this mask anywhere (either in the docs or in the NSTextStorage api. Does anyone know where I can find the details of this mask? (I have also search stackoverflow and while I find questions referencing the use of the mask, I still cannot find the bit definition).

0 投票
1 回答
327 浏览

ios - 当用户在任何地方键入时,如何强制 UITextView 使用默认的 NSFont 属性

我有一个UITextView显示NSAttributedText两种不同字体的字体。想象一下:“这里的示例文本。”

如果用户删除最多字符“ t ”,或者选择文本中间,然后输入“hahaha”,则新文本将以粗体显示。所以它看起来像:

“这里是 Tehahahaxt样本。” 或“此处为示例文本哈哈哈”。

SO:我怎样才能防止这种情况发生?换句话说,UITextView当用户开始输入时,我怎么能强制只使用特定的字体,无论它在哪里

注意:我已经尝试设置 in 的属性typingAttributes,但它会更改内容大小,这对我不起作用。UITextView-textView:shouldChangeTextInRange:

0 投票
1 回答
1026 浏览

objective-c - 在 AppKit 中测量文本宽度的性能

AppKit 中有没有办法真正快速地测量大量 NSString 对象(比如一百万)的宽度?我尝试了 3 种不同的方法来做到这一点:

  • [NSString sizeWithAttributes:]
  • [NSAttributedString 大小]
  • NSLayoutManager(获取文本宽度而不是高度)

    这是一些性能指标



    NSLayoutManager 显然是要走的路,但问题是

  • 由于创建了重量级的NSTextStorage对象 ,内存占用高(根据分析器超过 1GB) 。
  • 高创建时间。所花费的所有时间都是在创建上述字符串期间,这本身就是一个破坏者。(随后测量具有创建和布局的字形的 NSTextStorage 对象只需要大约 0.0002 秒)。
  • 7 秒对于我想要做的事情来说仍然太慢了。有更快的方法吗?在一秒钟内测量一百万根弦?

    如果你想玩,这里是 github 项目。

  • 0 投票
    1 回答
    2746 浏览

    ios - 如何在 Swift 中使用字符串初始化 NSTextStorage

    为了将另一个问题分解成更小的部分,我正在尝试设置所有 TextKit 组件。但是,在更改了我的初始化方式后我遇到了崩溃NSTextStorage。出于测试目的,我将项目简化为以下内容:

    它以EXC_I386_GPFLTenumerateLineFragmentsForGlyphRange的异常代码崩溃。该代码不是很容易解释。基本问题似乎归结为我的初始化方式。NSTextStorage

    如果我更换

    有了这个

    然后它工作。我究竟做错了什么?

    0 投票
    3 回答
    3802 浏览

    ios - 通过点击获取 UILabel 中的字符索引

    我想获取 UILabel 上点击字符的索引。我已经对 UILabel 进行了子类化。在我的 awakeFromNib() 我有这个:

    对于标签的前 5 个字符,它正在按照我想要的方式工作,就像我点击第一个字符并且在我的 touchesEnded 中我得到一个 0 的索引:

    var touchedCharacterIndex = layoutManager.characterIndexForPoint(touch.locationInView(self), inTextContainer: textContainer, fractionOfDistanceBetweenInsertionPoints: nil)

    但是当我点击 UILabel 前四个字符之后的任何位置时,我得到 4 或 0,这是不正确的。

    谢谢,

    更新

    根据评论中的建议,我添加了以下内容:

    我把它称为layoutSubviews(),和,awakFromNib和 的设置器。boundsframeattributedTexttext

    现在它给了我一些奇怪的索引,比如如果文本长度是 21,点击第一个字母给我 6。

    0 投票
    0 回答
    215 浏览

    objective-c - NSTextStorage appendAttributedString:未捕获的异常

    我正在尝试制作一个irc客户端。我保留一个 NSTextView 对象,并且我有一个包含 NSTextStorage 对象的容器类。每次用户单击“频道按钮”时,我都会使用 NSTextView 的 layoutManager 替换 NSTextStorage 对象。存储的文本采用 NSAttributedString 的形式,因为我想要不同颜色的部分文本。

    我在 NSTextStorage 中存储 NSAttributedString 的方式是我从容器对象中获取指针并在其上使用 appendAttributedString。

    而且我在 NSLog 中遇到了一个未捕获的异常并且没有中断。你能帮我找出问题所在吗?

    0 投票
    1 回答
    561 浏览

    objective-c - NSTextStorage - 如何在文本中查找返回字符(新行)

    在 NSTextStorage 中,我在当前指针位置插入时间字符串,如下所示:

    到目前为止一切顺利,效果很好。但现在我想将指针定位在下一行的开头。显然这是在下一个返回字符之后。

    现在如何找到下一个返回字符textStorage并将指针定位在那里?我没有在网上找到任何关于这个任务的提示。请帮忙 ...

    0 投票
    1 回答
    2107 浏览

    ios - iOS:带有自定义 NSTextStorage 的 UITextView 崩溃

    我正在用 Swift 编写一个 iOS 9 应用程序。我有一个托管 UITextView 的视图控制器,我正在为其分配一个自定义 NSTextStorage 对象。NSTextStorage 现在只是基本的。一切正常,文本显示在 UITextView 中,但是当我点击文本进行编辑时,应用程序崩溃,但出现以下异常:

    如果我从 UITextView 中删除我的自定义 NSTextStorage 对象,它会起作用。

    我的视图控制器使用情节提要中的模态转场加载。我加载文本内容并在 viewDidLoad 方法中配置 UITextView 和 NSTextStorage 对象:

    UtilityQueue并且MainQueue是保存对相应调度队列的引用的辅助内容。

    我的自定义NSTextStorage类如下所示:

    有任何想法吗?预先感谢您的协助。