UIView圓角與陰影的關(guān)系

今天在工作中遇到一個問題,如何給已經(jīng)設(shè)置圓角的view添加陰影效果。通常我們的做法是這樣的:

   UIView *view = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    view.backgroundColor = [UIColor redColor];
  
    // 設(shè)置圓角
    view.layer.cornerRadius = 6;
    view.layer.masksToBounds = YES;
    
    // 設(shè)置陰影
    view.layer.shadowRadius = 6;
    view.layer.shadowOffset = CGSizeMake(0,2);
    view.layer.shadowColor = [UIColor blueColor].CGColor;
    view.layer.shadowOpacity = 0.8;

但是顯示的效果并非我們期望的那樣:


4A356817-C3F4-4F05-90B6-8AF983750683.png

為什么設(shè)置的陰影效果沒有作用呢?
先理解setMasksToBounds的含義,setMasksToBounds表示對frame外的內(nèi)容進行了裁減,只可顯示frame內(nèi)的內(nèi)容。由于這種方法加的陰影在frame外,所以被裁減了。
如果想要達到即設(shè)置了圓角又設(shè)置陰影的效果,可以先把已經(jīng)設(shè)置圓角的view1添加到view2中,view2的frame和view1相同。然后設(shè)置view2的陰影效果,這樣便可以在視覺上看上去view1設(shè)置了圓角及陰影。具體代碼如下:

   UIView *view1 = [[UIView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
    view1.backgroundColor = [UIColor redColor];
    view1.layer.cornerRadius = 6;
    view1.layer.masksToBounds = YES;
    
    UIView *view2 = [[UIView alloc]initWithFrame:view1.bounds];
    [view2 addSubview:view1];
    view2.layer.shadowRadius = 6;
    view2.layer.shadowOffset = CGSizeMake(0,2);
    view2.layer.shadowColor = [UIColor blueColor].CGColor;
    view2.layer.shadowOpacity = 0.8;

效果如下:

0E5983F6-6DEF-42E3-ACB6-1B6984A7049E.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容