我对象的子类NSObject中有CALayer的实例变量。 我用它绘制和缓存的内容及其委托设置为我的对象。
但由于某些原因drawLayer:inContext:
方法不会被调用。 而actionForLayer:forKey:
委托方法不会被调用暗示委托越来越设定正确layer.delegate = self
的对象的init方法。
什么任何建议阻止我图层绘制方法drawLayer:inContext:
从获取调用?
我叫[layer setNeedDisplay]
常。 所以我想这是一些基本的错误。
drawLayer:inContext:
不会被调用,如果你的框架是CGRectZero或屏幕外。 另外,如果您的CALayer没有连接到现有的屏幕层,它永远不会画,无论多少次,你叫setNeedsDisplay
实现一个空drawRect:
- (void)drawRect:(CGRect)rect {
}
从ZoomingPDFViewer工程措施: -
的UIView使用的存在-drawRect:
以确定它是否应允许将被无效其CALayer的,那么这将导致该层中产生一个后备存储和-drawLayer:inContext:
被调用。 通过实施一个空-drawRect:
方法,我们允许UIKit的继续执行这个逻辑,同时做内我们的实际工作图纸-drawLayer:inContext:
该层对象的setNeedsDisplay
必须被调用。 只需添加层作为子层不为你做的。 从雷Wenderlich的得到这个CALayer的教程 。
如果你正在使用,最终用一个UIView的CALayer的,然后委托必须是视图对象本身:
从iOS CALayer的文档:
“的设备,如果该层是用一个UIView对象相关联,该属性必须设置为拥有该层的视图。”
如果你有一个多线程应用程序,其中后台处理驱动需要更新的CALayer,你必须调用setNeedsDisplay在主线程