Quelle est la relation entre les clipsToBounds D'UIView et les masksToBounds de CALayer?

Un UIView a une CALayer . C'est à peu près sûr. Mais les deux semblent fournir quelque chose qui signifie la même chose.

si j'avais mis clipsToBounds=YES , est-ce que cela aurait aussi mis masksToBounds=YES de la couche ? Pourquoi des noms différents? Quelqu'un sait?

47
demandé sur Lorenzo B 2009-07-24 17:44:50

2 réponses

ce sont des noms différents parce que UIView et CALayer sont différents et ont une terminologie différente associée à eux, mais ils sont fonctionnellement équivalents. Si vous démontez clipsToBounds , vous verrez qu'il appelle simplement masksToBounds (disassmebly à partir du simulateur de cadre, de sorte 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
102
répondu Louis Gerbarg 2016-01-25 00:21:06

Quelqu'un a demandé ce qui va se passer si clipToBounds est mis à false et maskToBounds est mis à true ou il peut être mieux si quelqu'un ajoute screenshots

je suis tombé sur la même question Où je voulais placer rayon coin et ombre à la fois à la vue.

mais ce n'est pas possible car dès que je mets masksToBound à Oui il supprime l'ombre mais clip le contenu et si je le mets à non il montre l'ombre mais ne clip le contenu.

j'ai fait le projet qui l'explique mieux la Compréhension de la ClipToBound Et MasksToBound

J'en suis venu à la conclusion que CALayer n'est pas un conteneur mais simplement une classe représentant un rectangle à l'écran avec un contenu visuel. chaque dessin fait sur UIView va sur CALayer ce qui provoque le contenu visuel de dessiner

masksToBound set to NO masksToBound set to YES

0
répondu vikram singh 2018-05-06 15:07:27