does -[CALayer drawInContext:] do something?



根据文档 默认实现不执行任何操作。

但。。。我从drawRect方法抛出异常,我看到下一个调用堆栈

3   EasyWakeup                          0x0003a7b6 -[AlarmIntervalView drawRect:] + 71
4   UIKit                               0x003f6187 -[UIView(CALayerDelegate) drawLayer:inContext:] + 426
5   QuartzCore                          0x011a8b5e -[CALayer drawInContext:] + 143

所以据我所知,这意味着默认实现 -[CALayer drawInContext:] 调用委托方法。正确吗?由于我知道旋转技术,我不确定 objective-c 中的任何内容......

你是对的,CALayer的默认drawInContext:什么都不做。除非层具有委托并且该层的委托实现drawLayer:inContext:,否则会发生这种情况。因此,文档的问题在于,它应该在语句"默认实现不执行任何操作"旁边有一个小星号。

请记住,所有视图都由某种 CALayer 支持。此图层将自动设置为将其视图设置为委托。表面上看不出的是,UIView确实实现了CALayer的委托drawLayer:inContext:。这是您在调用堆栈上看到的所有这些调用。

您的 AlarmIntervalView 实例

会自动具有一个后备层,并且该后备层将其委托设置为您的 AlarmIntervalView 实例。系统的某些部分调用支持层的drawInContext:,该检查委托(它有(,以drawLayer:inContext:作为参数发送委托respondsToSelector:(UIView 确实响应(,最后实际将消息drawLayer:inContext:发送。UIView 的drawLayer:inContext:实现调用视图的drawRect:

我真的不确定你为什么提到滑动。

[我的回答很长,主要是为了我的利益。它也有助于我学习。

相关内容

  • 没有找到相关文章

最新更新