給切過圓角的View,加陰影(既切圓角又加陰影)

給切過圓角的View,加陰影(既切圓角又加陰影)
先附上效果圖:

效果圖

iOS項目上常常需要給一個View設(shè)置圓角的同時再加陰影。最近做一個項目,需要切圓角加陰影,并且還要做動畫。大家都知道View處理視圖布局,layer來處理動畫。
這樣一來做法有兩種,第一就是公司UI設(shè)計人員給切圖,我們直接對切圖進行操作,很簡單,這里不贅述。
但是,如果要求的地方比較少還好,如果多了,就不適合用切圖了。而且不是什么時候用圖片都可以的。
所以,我們這里介紹一個用代碼實現(xiàn)的方法。

首先大家要明白兩句代碼:

clipsToBoundsmasksToBounds。具體意思稍后給大家介紹。

先附上一個代碼,平時我們都是這么寫的:

_imgView.layer.cornerRadius = 50;   //設(shè)置imageView的圓角

_imgView.layer.masksToBounds = YES;

_imgView.layer.shadowColor = [UIColor blackColor].CGColor;//設(shè)置陰影的顏色

_imgView.layer.shadowOpacity = 0.8;//設(shè)置陰影的透明度

_imgView.layer.shadowOffset = CGSizeMake(1, 1);//設(shè)置陰影的偏移量

_imgView.layer.shadowRadius = 3;//設(shè)置陰影的圓角

但是結(jié)果會發(fā)現(xiàn)沒有效果。
其實原因很簡單。我們已經(jīng)設(shè)置出了陰影,但是masksToBounds這句代碼,會把,超出View視圖的部分切掉.如果masksToBounds設(shè)置為NO,陰影會在,但是圓角就會沒了.

高潮,正解來了

現(xiàn)在我們先創(chuàng)建一個父視圖,給父視圖加陰影,在再給原先的視圖切圓角.

  UIView *shadowView = [[UIView alloc]initWithFrame:CGRectMake(143 , 200, 100, 100)];
    
    [self.view addSubview:shadowView];
    
    shadowView.layer.shadowColor = [UIColor blackColor].CGColor;
    
    shadowView.layer.shadowOffset = CGSizeMake(5, 5);
    
    shadowView.layer.shadowOpacity = 1;
    
    shadowView.layer.shadowRadius = 9.0;
    
    shadowView.layer.cornerRadius = 9.0;
    
    shadowView.clipsToBounds = NO;
    
    [shadowView addSubview:_imgView];
 

這樣之后就可以了,這是為什么呢?
我們回過頭解釋一下上面提到的兩句代碼:
clipsToBounds
:指的是 某視圖上的子視圖(注意是子視圖);如果超出父視圖,超出父視圖的部分就會截掉;
masksToBounds
:指的是 某視圖的圖層上的子圖層(還是這個視圖),如果超出這個視圖,就截掉.

好了,很簡單,大家理解一下.

最后編輯于
?著作權(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)容