核心文字表现

Jos*_*hua 17 objective-c ipad core-text ios

当我在原始iPad上运行Core Text时,我看到了一些性能问题.

我使用Core Text和UITextInput基于OmniGroup的协议创建了一个可编辑的视图OUIEditableFrame.

当视图中有相当数量的文本说180行时,键入/输入大大滞后,一键敲击通常需要1-2秒.

使用仪器和模拟器我能够缩小问题的范围并找出花费了大量时间的东西.事实证明这是因为我用每个击键重绘帧,花费这么多时间的是调用CTFramesetterCreateWithAttributedStringCTFramesetterCreateFrame.

我必须重写每个按键,以便文本更新,这意味着调用CTFramesetterCreateWithAttributedStringCTFramesetterCreateFrame.

有没有其他人遇到这个问题,如果有的话,他们是如何解决这个问题的呢?


编辑:

进行了一些进一步的调查,结果表明如果属性字符串没有属性,那么所有内容都会更快地绘制并且没有任何延迟.更改字体,颜色或段落样式都会降低速度.不知道这可能与它有关吗?

Rob*_*ier 9

您可能不应该使用CTFramesetter创建类似的东西UITextView.相反,您应该保留一组CTLine引用.如果你需要关于断字的帮助,那么你可以使用a CTTypeSetter,但你只需要在当前的插入符号及其下方处理它们(你仍然会创建和销毁排字器,所以请注意你对它们的要求) .

保持数组的一个好处CTLines是,如果内存不足并且稍后重建它们,就可以丢弃那些不需要的数组.只需跟踪每一行的字符范围.


Jos*_*hua 5

从我原来的问题开始,我做了一些调查,发现绘制的字符串具有的属性越多,所需的时间就越长.

凭借这些知识,我决定简单地删除/隐藏kCTForegroundColor用户无法看到的任何属性(特别是),这加快了十倍的绘图并使其成为更实用的体验.