CALayer的委托方法drawLayer没有得到所谓的(CALayer delegate meth

2019-07-31 03:57发布

我对象的子类NSObject中有CALayer的实例变量。 我用它绘制和缓存的内容及其委托设置为我的对象。

但由于某些原因drawLayer:inContext:方法不会被调用。 而actionForLayer:forKey:委托方法不会被调用暗示委托越来越设定正确layer.delegate = self的对象的init方法。

什么任何建议阻止我图层绘制方法drawLayer:inContext:从获取调用?

我叫[layer setNeedDisplay]常。 所以我想这是一些基本的错误。

Answer 1:

drawLayer:inContext:不会被调用,如果你的框架是CGRectZero或屏幕外。 另外,如果您的CALayer没有连接到现有的屏幕层,它永远不会画,无论多少次,你叫setNeedsDisplay



Answer 2:

实现一个空drawRect:

- (void)drawRect:(CGRect)rect {
}

ZoomingPDFViewer工程措施: -

的UIView使用的存在-drawRect:以确定它是否应允许将被无效其CALayer的,那么这将导致该层中产生一个后备存储和-drawLayer:inContext:被调用。 通过实施一个空-drawRect:方法,我们允许UIKit的继续执行这个逻辑,同时做内我们的实际工作图纸-drawLayer:inContext:



Answer 3:

该层对象的setNeedsDisplay必须被调用。 只需添加层作为子层不为你做的。 从雷Wenderlich的得到这个CALayer的教程 。



Answer 4:

如果你正在使用,最终用一个UIView的CALayer的,然后委托必须是视图对象本身:

从iOS CALayer的文档:

“的设备,如果该层是用一个UIView对象相关联,该属性必须设置为拥有该层的视图。”



Answer 5:

如果你有一个多线程应用程序,其中后台处理驱动需要更新的CALayer,你必须调用setNeedsDisplay在主线程



文章来源: CALayer delegate method drawLayer not getting called