如何是的UIView的clipsToBounds和CALayer的的masksToBounds之间的

2019-06-17 15:12发布

一个UIView有一个CALayer 。 这是相当肯定的。 但两者似乎提供的东西,这意味着同样的事情。

如果我设置clipsToBounds=YES ,就这也设置图层的masksToBounds=YES ? 为什么不同的名字? 有谁知道?

Answer 1:

他们是不同的名称,因为UIViewCALayer是不同的,并具有与之相关的不同的术语,但它们在功能上等同。 如果你拆开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


Answer 2:

有些人问会发生什么,如果clipToBounds被设置为false,maskToBounds设置为true或者它可以更好,如果有人添加截图

我偶然发现了我想要的地方设置圆角半径和阴影两者的观点相同的问题。

但它是不可能的,因为只要我设置masksToBound为是它消除了阴影,但夹的内容,如果我将它设置为不显示它的影子,但不夹的内容。

我做了这解释了它更好的项目了解ClipToBound而MasksToBound

我得出的结论是CALayer的不是容器,但它仅仅是代表与视觉内容在屏幕上的一个矩形的类。 上的UIView所做的每一图纸推移的CALayer这会导致视觉内容绘制



文章来源: How is the relation between UIView's clipsToBounds and CALayer's masksToBounds?