13 iphone core-animation quartz-graphics
我的对象NSObject的子类有CALayer实例变量.我使用它来绘制和缓存内容,并将其委托设置为我的对象.
但由于某些原因,drawLayer:inContext:方法永远不会被调用.而actionForLayer:forKey:委托方法确实被称为暗示委托layer.delegate = self在对象的init方法中正确设置.
有关什么阻止我的图层绘制方法drawLayer:inContext:被调用的任何建议?
我[layer setNeedDisplay]经常被称为.所以我想这是一个根本性的错误.
ama*_*ttn 23
drawLayer:inContext:如果您的框架是CGRectZero或屏幕外,将不会被调用.此外,如果您的CALayer未附加到现有的屏幕图层,则无论您拨打多少次,它都不会绘制setNeedsDisplay
win*_*son 17
实现空 drawRect:
- (void)drawRect:(CGRect)rect {
}
Run Code Online (Sandbox Code Playgroud)
取自ZoomingPDFViewer项目: -
UIView使用存在
-drawRect:来确定它是否应该允许其CALayer无效,这将导致该层创建一个后备存储-drawLayer:inContext:并被调用.通过实现一个空-drawRect:方法,我们允许UIKit继续实现这个逻辑,同时在里面进行真正的绘图工作-drawLayer:inContext:
如果您最终使用带有UIView的CALayer,那么委托必须是视图对象本身:
从iOS CALayer文档:
"在iOS中,如果图层与UIView对象相关联,则必须将此属性设置为拥有图层的视图."