Ios UIView与x27之间的关系如何;s ClipsTopounds和CALayer';那是假面犬?

Ios UIView与x27之间的关系如何;s ClipsTopounds和CALayer';那是假面犬?,ios,uiview,uikit,core-animation,calayer,Ios,Uiview,Uikit,Core Animation,Calayer,ui视图有一个CALayer。那是相当肯定的。但两者似乎都提供了相同的含义 如果我设置了clipsToBounds=YES,这还会设置层的masksToBounds=YES?为什么有不同的名字?有人知道吗?它们是不同的名称,因为UIView和CALayer是不同的,并且有不同的相关术语,但它们在功能上是等效的。如果您反汇编clipsToBounds,您将看到它只调用masksToBounds(从模拟器框架反汇编,因此x86): 有人问如果clipToBounds设置为false,maskToBo

ui视图
有一个
CALayer
。那是相当肯定的。但两者似乎都提供了相同的含义


如果我设置了
clipsToBounds=YES
,这还会设置层的
masksToBounds=YES
?为什么有不同的名字?有人知道吗?

它们是不同的名称,因为
UIView
CALayer
是不同的,并且有不同的相关术语,但它们在功能上是等效的。如果您反汇编
clipsToBounds
,您将看到它只调用
masksToBounds
(从模拟器框架反汇编,因此x86):


有人问如果clipToBounds设置为false,maskToBounds设置为true会发生什么,或者如果有人添加屏幕截图会更好

我偶然发现了同样的问题,我想在视图中同时设置角半径和阴影

但这是不可能的,因为一旦我将masksToBound设置为“是”,它就会删除阴影,但会剪辑内容;如果我将其设置为“否”,它会显示阴影,但不会剪辑内容

我做了一个项目,这个项目解释得更好

我得出的结论是,CALayer不是一个容器,而是一个简单的类,在屏幕上用可视内容表示一个矩形。 在UIView上完成的每个绘图都会在CALayer上进行,这会导致视觉内容的绘制


哇,太棒了!你是如何了解这些细节的?在构建时,这可以在xcode中完成吗?或者是否需要一个工具来检查正在发生的事情?对于快速反汇编,我使用otool,它是开发人员工具的一部分。如果我浏览大量代码,我倾向于使用otx生成一个完整的程序集列表,包括为我执行所有选择器查找。如果将上面的
代码示例
视图移到右侧(请参见上面的滚动条),你怎么能从中看出它实际上只是调用了masksToBounds?@Macmee然后你会看到调用masksToBounds.scroll条是黄金提示!
-(BOOL)[UIView(Rendering) clipsToBounds]
    +0  3091938a  55              pushl    %ebp
    +1  3091938b  89e5            movl     %esp,%ebp
    +3  3091938d  e800000000      calll    0x30919392
    +8  30919392  59              popl     %ecx
    +9  30919393  8b4508          movl     0x08(%ebp),%eax
   +12  30919396  8b5004          movl     0x04(%eax),%edx         (CALayer)_layer
   +15  30919399  8b8186cb1301    movl     0x0113cb86(%ecx),%eax    masksToBounds
   +21  3091939f  89450c          movl     %eax,0x0c(%ebp)
   +24  309193a2  895508          movl     %edx,0x08(%ebp)
   +27  309193a5  c9              leave
   +28  309193a6  e92e211801      jmpl     0x31a9b4d9