UIView的clipsToBounds和CALayer的maskToBounds之间的关系如何?

时间:2009-07-24 13:44:50

标签: ios uiview uikit core-animation calayer

UIView有一个CALayer。这很确定。但两者似乎都提供了同样的东西。

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

2 个答案:

答案 0 :(得分:114)

它们的名称不同,因为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

答案 1 :(得分:3)

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

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

但是这是不可能的,因为只要我将masksToBound设置为YES就会移除阴影但剪切内容,如果我将其设置为NO则显示阴影但不剪切内容。

我做了更好地解释它的项目 Understanding the ClipToBound And MasksToBound

我得出的结论是,CALayer不是一个容器,但它只是一个代表屏幕上带有可视内容的矩形的类。 在UIView上完成的每个绘图都在CALayer上进行,这会导致可视内容被绘制

masksToBound set to NO masksToBound set to YES