Hoe is de relatie tussen de clipsToBounds van UIView en de masksToBounds van CALayer?

Een UIViewheeft een CALayer. Dat is vrij zeker. Maar beide lijken iets te bieden dat hetzelfde betekent.

Als ik clipsToBounds=YESzou instellen, zou dit dan ook de masksToBounds=YESvan de laag instellen? Waarom verschillende namen? Weet iemand het?


Antwoord 1, autoriteit 100%

Het zijn verschillende namen omdat UIViewen CALayerverschillend zijn en er een andere terminologie aan verbonden is, maar ze zijn functioneel equivalent. Als je clipsToBoundsdemonteert, zul je zien dat het gewoon masksToBoundsaanroept (demontage van het simulatorframework, dus 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

Antwoord 2, autoriteit 4%

Iemand vroeg wat er zal gebeuren als clipToBounds is ingesteld op false en maskToBounds is ingesteld op true of het kan beter zijn als iemand screenshots toevoegt

Ik stuitte op hetzelfde probleem waarbij ik de hoekradius en schaduw zowel voor het uitzicht wilde instellen.

maar het is niet mogelijk, want zodra ik masksToBound op YES instel, wordt de schaduw verwijderd maar wordt de inhoud afgekapt en als ik dit op NEE instel, wordt de schaduw weergegeven maar wordt de inhoud niet bijgesneden.

Ik heb het project gemaakt dat het beter uitlegt
De ClipToBound en MasksToBound begrijpen

Ik ben tot de conclusie gekomen dat CALayer geen container is, maar gewoon een klasse die een rechthoek op het scherm met visuele inhoud vertegenwoordigt.
elke tekening die op UIView wordt gedaan, gaat op CALayer, waardoor de visuele inhoud wordt getekend


Other episodes