根据文档 默认实现不执行任何操作。
但。。。我从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 实例。系统的某些部分调用支持层的drawInContext:
,该检查委托(它有(,以drawLayer:inContext:
作为参数发送委托respondsToSelector:
(UIView 确实响应(,最后实际将消息drawLayer:inContext:
发送。UIView 的drawLayer:inContext:
实现调用视图的drawRect:
。
我真的不确定你为什么提到滑动。
[我的回答很长,主要是为了我的利益。它也有助于我学习。