IT story

UIView의 clipsToBounds와 CALayer의 masksToBounds 사이의 관계는 어떻습니까?

hot-time 2021. 1. 6. 20:23
반응형

UIView의 clipsToBounds와 CALayer의 masksToBounds 사이의 관계는 어떻습니까?


A UIView에는 CALayer. 꽤 확실합니다. 그러나 둘 다 같은 것을 의미하는 것을 제공하는 것 같습니다.

내가 설정 clipsToBounds=YES하면 이것은 또한 레이어를 설정 masksToBounds=YES합니까? 왜 다른 이름입니까? 아는 사람 있나요?


때문에 그들은 다른 이름입니다 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

어떤 사람은 clipToBounds가 false로 설정되고 maskToBounds가 true로 설정되면 어떤 일이 발생하는지 물었습니다. 또는 누군가가 스크린 샷을 추가하면 더 좋을 수 있습니다.

코너 반경과 그림자를 모두 뷰에 설정하려는 동일한 문제를 발견했습니다.

하지만 masksToBound를 YES로 설정하자마자 그림자를 제거하지만 콘텐츠를 자르고 NO로 설정하면 그림자를 표시하지만 콘텐츠를 자르지 않기 때문에 불가능합니다.

ClipToBound 및 MasksToBound 이해 하기 더 잘 설명하는 프로젝트를 만들었습니다.

CALayer는 컨테이너가 아니라 단순히 시각적 콘텐츠가있는 화면의 사각형을 나타내는 클래스라는 결론에 도달했습니다. UIView에서 수행 된 모든 드로잉은 CALayer로 이동하여 시각적 콘텐츠가 그려집니다.

masksToBound가 NO로 설정 됨 masksToBound가 YES로 설정 됨

참조 URL : https://stackoverflow.com/questions/1177775/how-is-the-relation-between-uiviews-clipstobounds-and-calayers-maskstobounds

반응형