首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSView和CALayer

NSView和CALayer
EN

Stack Overflow用户
提问于 2018-08-15 13:09:50
回答 1查看 2K关注 0票数 2

在Cocoa上,为了确保视图具有自己的层,应该将wantsLayer设置为true

wantsLayer wantsUpdateLayer 的确切区别是什么?

据我所理解,wantsLayer导致视图开始使用层,而wantsUpdateLayer则改变视图的绘制方式(通过调用updateLayer而不是draw)。

wantsLayer设置为true而不将wantsUpdateLayer设置为true的用途是什么?

如果wantsLayer设置为true,还需要将wantsUpdateLayer设置为true吗?

我应该在哪里与视图层交互?

您应该只与updateLayer函数中的层进行交互,这是正确的吗?这是否适用于CALayer的每个属性和方法?例如,如果我想添加一个子层,这是否也应该在updateLayer中完成?

此外,编辑最新的AppKit版本说明如下:

针对macOS 10.14的应用程序应该更喜欢wantsUpdateLayer属性而不是wantsLayer属性。

那么,这是否意味着在macOS 10.14上,如果您已经在使用wantsUpdateLayer,那么实际上不需要使用wantsUpdateLayer吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-17 16:36:46

wantsLayer属性指示您的NSView是否将由一个层支持。默认情况下,NSViews是而不是默认的层。因此,如果您需要一个图层(例如,对于动画),您需要指定它。

wantsUpdateLayer是非常不同的。NSView可以通过两种(独占)方式更新它们的内容:

  • 通过调用drawRect:方法
  • 通过调用updateLayer方法

默认情况下,wantsUpdateLayer返回NO,因此调用drawRect:。但是如果您将wantsUpdateLayer设置为返回YES (如果您的视图是层支持的),那么updateLayer将被调用。

更新程序可以比drawRect快得多:如果您可以通过修改层属性来更新视图内容的话

因此,要回答你们的问题:

  • 如果您需要在wantsLayer中进行花式绘图,则希望将wantsUpdateLayer设置为YES,wantsUpdateLayer设置为NO:(记住,updateLayer速度更快,但只能修改层属性)
  • 是的,如果您将wantsLayer设置为Yes,则需要将wantsUpdateLayer设置为YES
  • 您可以在任何需要的地方与您的层属性交互,包括从drawRect中:
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51859378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档