Een UIView
heeft een CALayer
. Dat is vrij zeker. Maar beide lijken iets te bieden dat hetzelfde betekent.
Als ik clipsToBounds=YES
zou instellen, zou dit dan ook de masksToBounds=YES
van de laag instellen? Waarom verschillende namen? Weet iemand het?
Antwoord 1, autoriteit 100%
Het zijn verschillende namen omdat UIView
en CALayer
verschillend zijn en er een andere terminologie aan verbonden is, maar ze zijn functioneel equivalent. Als je clipsToBounds
demonteert, zul je zien dat het gewoon masksToBounds
aanroept (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