Какова связь между UIView clipsToBounds и CALayer masksToBounds?

A UIView имеет a CALayer. Это довольно уверенно. Но оба, похоже, предоставляют что-то, что означает одно и то же.

Если бы я установил clipsToBounds=YES, это также установило бы слой masksToBounds=YES? Почему разные имена? Кто-нибудь знает?

Ответ 1

Это разные имена, потому что UIView и CALayer отличаются друг от друга и имеют терминологию, связанную с ними, но они функционально эквивалентны. Если вы разобьете clipsToBounds, вы увидите, что он просто вызывает masksToBounds (disassmebly из рамки симулятора, поэтому 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