cocoa – 使用自定义CALayer调用updateLayer的Layer支持的NSView?

cocoa – 使用自定义CALayer调用updateLayer的Layer支持的NSView?,第1张

概述我有一个自定义的图层支持NSView,并覆盖makeBackingLayer方法返回自定义CALayer子类.我还覆盖了wantUpdateLayer以返回true,从而完全选择了类似图层的绘图. override func makeBackingLayer() -> CALayer { return Layer() // my custom class with "drawLayer:" 我有一个自定义的图层支持NSVIEw,并覆盖makebackingLayer方法返回自定义CALayer子类.我还覆盖了wantUpdateLayer以返回true,从而完全选择了类似图层的绘图.

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 its drawRect: method to draw its content.

总结

以上是内存溢出为你收集整理的cocoa – 使用自定义CALayer调用updateLayer的Layer支持的NSView?全部内容,希望文章能够帮你解决cocoa – 使用自定义CALayer调用updateLayer的Layer支持的NSView?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1024162.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存