首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动画NSLayoutManager绘图

动画NSLayoutManager绘图
EN

Stack Overflow用户
提问于 2013-12-01 20:26:09
回答 1查看 974关注 0票数 2

我有一个NSLayoutManager,它使用以下代码绘制文本:

代码语言:javascript
复制
[[self textLayoutManager] drawGlyphsForGlyphRange: NSMakeRange(0, [[self text] length])
                                          atPoint: textFrame.origin];    

在我看来是-drawRect:。这是很好的工作,但我真正想要做的是动画的文字,一个字符,就像它是被键入。

我试图将字符添加到“可见字符串”变量中,然后调用-[self setNeedsDisplay],但是当处理超过20个字符的文本时,它开始滞后,因为每次都会重新绘制所有文本。

回归:如何动画NSLayoutManager-drawGlyphsForGlyphRange:atPoint:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-01 21:49:15

(免责声明:我对新API没有太多的经验,所以这主要来自于以前文本呈现的经验。)

您的主要减速将来自于对布局管理器正在使用的文本进行全面更改。即使你只是在附加文本,替换它所使用的文本也会导致它扔掉所有的布局计算--间距,所需的符号,实际上将这些符号读入RAM中,应用属性等等--然后重新开始,这很快就会变得非常昂贵。就实际的NSLayoutManager而言,这是“使布局无效”。

我从头顶上看到了一些潜在的解决方案。您可以将NSLayoutManager子类(“您可以创建一个NSLayoutManager子类来处理其他文本属性,无论它是否固有”)。并重写showCGGlyphs:positions:count:font:matrix:attributes:inContext:以逐步忽略某些符号(从而保留它使用的原始文本完整)。另一种方法是准确地模拟在本机容器中输入文本时所发生的事情--使用可变文本存储,并逐个添加所需的文本字符,这样文本计算就可以迭代完成。

如果仅仅这些人仍然没有很好的性能,那么考虑将这些技术与一些本机文本视图结合使用;尽管现在这种情况不如过去的SDKs那样真实,但不可编辑的UITextViewUILabel (分别用于可变的和不变的文本)所包含的优化远远超过我们一般人所能理解的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20316834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档