UIView
にはCALayer
があります。それはかなり確かです。しかし、どちらも同じことを意味する何かを提供しているようです。
clipsToBounds=YES
を設定した場合、レイヤーのmasksToBounds=YES
も設定されますか?なぜ違う名前なの?誰もが知っていますか?
UIView
とCALayer
は異なり、関連する用語も異なるため、これらは異なる名前ですが、機能的には同等です。 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で行われるため、ビジュアルコンテンツが描画されます