AUIView
有一个CALayer
。这很确定。但两者似乎都提供了相同的含义。
如果我设置clipsToBounds=YES
了,这也会设置图层masksToBounds=YES
吗?为什么不同的名字?有谁知道?
AUIView
有一个CALayer
。这很确定。但两者似乎都提供了相同的含义。
如果我设置clipsToBounds=YES
了,这也会设置图层masksToBounds=YES
吗?为什么不同的名字?有谁知道?
它们是不同的名称,因为它们是不同的,UIView
并且CALayer
具有与之相关的不同术语,但它们在功能上是等效的。如果你反汇编clipsToBounds
你会看到它只是调用masksToBounds
(从模拟器框架反汇编,所以 x86):
-(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
有人问如果 clipToBounds 设置为 false 并且 maskToBounds 设置为 true 会发生什么,或者如果有人添加屏幕截图会更好
我偶然发现了同样的问题,我想为视图设置角半径和阴影。
但这是不可能的,因为一旦我将 maskToBound 设置为 YES,它就会删除阴影但会剪切内容,如果我将其设置为 NO,它会显示阴影但不会剪切内容。
我制作的项目可以更好地解释它 理解 ClipToBound 和 MasksToBound
我得出的结论是 CALayer 不是一个容器,它只是一个代表屏幕上具有视觉内容的矩形的类。在 UIView 上完成的每个绘图都在 CALayer 上进行,这会导致视觉内容绘制