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

效果圖
iOS項目上常常需要給一個View設(shè)置圓角的同時再加陰影。最近做一個項目,需要切圓角加陰影,并且還要做動畫。大家都知道View處理視圖布局,layer來處理動畫。
這樣一來做法有兩種,第一就是公司UI設(shè)計人員給切圖,我們直接對切圖進行操作,很簡單,這里不贅述。
但是,如果要求的地方比較少還好,如果多了,就不適合用切圖了。而且不是什么時候用圖片都可以的。
所以,我們這里介紹一個用代碼實現(xiàn)的方法。
首先大家要明白兩句代碼:
clipsToBounds和masksToBounds。具體意思稍后給大家介紹。
先附上一個代碼,平時我們都是這么寫的:
_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
:指的是 某視圖的圖層上的子圖層(還是這個視圖),如果超出這個視圖,就截掉.
好了,很簡單,大家理解一下.