2009-07-24 1 views
45

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

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

ответ

96

Это разные имена, потому что 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 
+0

ничего себе, впечатляют! как вы добираетесь до этих деталей? можно ли это сделать только в xcode при создании или есть инструмент, необходимый для проверки того, что происходит? – Thanks

+3

Для быстрой разборки я использую otool, который является частью инструментов разработчика. Если я прохожу через много кода, я, как правило, использую otx для создания полного списка сборок, включая выполнение всех запросов выбора для меня. –

+0

Как вы можете сказать, глядя на это, что он действительно просто вызывает masksToBounds? – Macmee