UILabel/NSTextView与CATextLayer

Wil*_*sch 8 macos portability text view ios

我有一个iOS应用程序,我正在转换为iOS/Mac应用程序.在iOS版本中,我使用UILabels作为我的文本.显然,我不能在mac上做到这一点.我可以看到两个选项:

选项1:在iOS上使用UILabel,在Mac上使用NSTextView.

选项2:在两个平台上使用CATextLayers,作为一般策略的一部分,尽可能地对它们进行操作.

显然,选项2有一个很大的优势,即维护的代码更少.我的问题是 - 选项1是否具有我应该注意的任何优势?特别是,CATextLayer是否有UILabel和NSTextView没有的缺点?

编辑:这是一场比赛.用户从不输入文本 - 但游戏确实会输出一些分数,例如.

NSG*_*God 13

这取决于您打算如何使用文本以及您正在编写的应用程序类型.如果文本主要是静态的并且在UI中用作标签或对话框,那么NSTextField应该可以正常工作.如果你需要花哨的动画,那么CATextLayer可能更合适.如果您正在编写游戏(例如,纸牌游戏),则UI将更加相似并且使用CATextLayer和CoreAnimation将有意义.如果您正在编写一个更通用的应用程序,如聊天客户端,那么用户与应用程序交互的界面和方式就会大不相同,而且使用NSTextFields或更有意义NSTextViews.

同样,这一切都取决于您正在创建的应用程序的类型,但如果它是一个更传统的应用程序,如聊天客户端示例,那么我会认为使用CATextLayer和必须以编程方式在界面中创建所有内容,而不是使用NSTextField和放置东西在一个nib文件中,将意味着数百行代码.另一方面,如果应用程序更像是单人纸牌游戏示例,并且图层和属性的尺寸是以考虑运行应用程序的平台的方式定义的,那么您可能可以节省大量代码.

对于记录,NSTextField可能是最接近的等效AppKit类UILabel.NSTextView是一个更重量级的课程,如果你想要完整的段落和更高级的排版,你通常只需要它.使NSTextField重量更轻的一部分是它们倾向于共享一个不可见的单个NSTextView(或它的超类NSText)作为字段编辑器,这有助于文本输入.由于应用程序中只有一个文本字段可以同时具有焦点,因此它可以共享一个公共字段编辑器以帮助提高性能.


Ocu*_*dee 5

还有一个你需要注意的缺点(或者未来的人会看到这个线程)。使用 UILabel 时,所有可访问性都通过 UIAccessibility 免费提供。对于 CATextLayer,您需要自己处理所有事情:触摸内部、accessibilityLabel、accessibilityElements 列表中的位置...