这可能是另一个厚实的新手问题,会让每个人都拍他们的额头并说“Duhhhhhh!” 但是,在又长时间阅读和观看了无数 Brad Larson 视频之后,我对为什么总体上的委托,特别是 CALayer 委托似乎是一个如此神秘的主题感到困惑。
除非您想要高度封装,否则所有书籍和 Larson 博士都在谈论“不要对 CALayers 进行子分类”,但我在任何地方都找不到 CALayer 委托可以提供的好处的简洁明了的例子。每个人似乎都将主机视图控制器对象用作某种敷衍的委托,或者他们将所有内容都放入 App 委托中,“作为可以实现的简短示例”。
我正在尝试预先学习“最佳实践”——因为我太新了,因为我不想发展任何糟糕或邋遢的编程特征——所以我热衷于检查我在几分钟内采取的每一个新步骤细节。据我所知,CALayer 委托类中只有大约 3 个委托特定的方法。它们是“displayLayer:”、“drawLayer:InContext:”和“actionForLayer:ForKey:”。在我的 Opacity 生成的 Quartz 东西中,我使用了我想在运行时操作的颜色变量,并且在没有子类化 CALayer 的情况下这样做。使用键值对的副作用之一是存在一个名为“defaultValueForKey:”的类方法,它根据用于识别颜色的键值来描述我的颜色的初始值。这(显然)不是 CALayer 委托方法。那么如何在没有子类化 CALayer 的情况下实现此代码(之后,所有代码都只设置一个默认值)?只要您只需要少数特定于委托的方法,委托似乎就可以了。
谁能解释为什么在实现委托时,Apple 的研究人员没有简单地将方法定义编译单元从类单元转移到分配的委托单元。例如,只需在类(或子类)中通常可用的每个方法前面放置一个初始参数即可;'forLayer:(CALayer *)TheRest:OfThe:方法'?这样,一个简单的 switch 或 if-then 堆栈可以将类的常用方法应用到一个集中的对象 - 委托中。
正如我在开始时所说,我可能遗漏了一些非常基本的东西,但谁能告诉我如何在没有子类化 CALayer 的情况下实现所有键值颜色变量初始化?
提前致谢,VV