overrIDe func makebackingLayer() -> CALayer { return Layer() // my custom class with "drawLayer:" implemented}overrIDe var wantsUpdateLayer:Bool{ return true}// never calledoverrIDe func updateLayer() { super.updateLayer() println("updateLayer after") self.layer?.borderWIDth += 1}
一旦我这样做,我发现当我设置NSVIEw.needsdisplay = true时,它将调用路由到自定义层的drawInContext:方法而不是updateLayer:方法.为什么这样做?在我的例子中,我检查过如果我删除了makebackingLayer覆盖,那么我的updateLayer会以预期的方式被调用.
我无法完全理解它,但其他实例指出这样一种观点,即当你的makebackingLayer返回一个customCALayer`时,你实际上将你的自定义层托管在父背衬层中. (我的纯粹猜测)
此外,鉴于CALayer的drawInContext:更“低级”,两条绘图路线之间是否会有不同的性能特征?有关该问题的更多详细信息,请参阅此SO问题:Layer-backed NSView performance with rendering directly in CALayer.drawInContext:
任何见解将不胜感激.
解决方法 当然你现在已经修好了,但对于未来的读者,我通过阅读 NSView documentation找到了可能的解释!总结If the
canDrawSubvIEwsIntolayer
property is set to YES,the vIEw
ignores the value returned by this method. Instead,the vIEw always
uses itsdrawRect:
method to draw its content.
以上是内存溢出为你收集整理的cocoa – 使用自定义CALayer调用updateLayer的Layer支持的NSView?全部内容,希望文章能够帮你解决cocoa – 使用自定义CALayer调用updateLayer的Layer支持的NSView?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)