【问题标题】:How is the relation between UIView's clipsToBounds and CALayer's masksToBounds?UIView的clipsToBounds和CALayer的masksToBounds是什么关系?
【发布时间】:2010-11-13 17:57:40
【问题描述】:

UIView 有一个CALayer。这很确定。但两者似乎都提供了相同的含义。

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

【问题讨论】:

    标签: ios uiview uikit core-animation calayer


    【解决方案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
    

    【讨论】:

    • 哇,令人印象深刻!你怎么知道这个细节?这可以在构建时仅在 xcode 中完成,还是需要一个工具来检查发生了什么?
    • 为了快速反汇编,我使用 otool,它是开发者工具的一部分。如果我浏览大量代码,我倾向于使用 otx 生成完整的程序集列表,包括为我执行所有选择器查找。
    • 你怎么看出来,它真的只是调用masksToBounds?
    • @Macmee 如果您将上方的 code sample 视图移动到右侧(请参阅上面有滚动条),那么您将看到对 maskToBounds 的调用。
    • 滚动条是黄金提示!
    【解决方案2】:

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

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

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

    我制作的项目可以更好地解释它 Understanding the ClipToBound And MasksToBound

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

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 2011-12-11
      • 2014-07-08
      • 2011-08-20
      • 2023-03-15
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      相关资源
      最近更新 更多