UIView的陰影設置主要通過UIView的layer
的相關屬性來設置
- 陰影的顏色
imgView.layer.shadowColor = [UIColor blackColor].CGColor;
- 陰影的透明度
imgView.layer.shadowOpacity = 0.8f;
- 陰影的圓角
imgView.layer.shadowRadius = 4.f;
- 陰影偏移量
imgView.layer.shadowOffset = CGSizeMake(4,4);
imgView.layer.shadowOffset = CGSizeMake(0,0);
其實從偏移量上可以看出來,即使偏移量為(0,0)時俯抖,圍繞view的四周依然能看到一定陰影。
這里還要說明一點的是覆劈,當我們不設置陰影的偏移量的時候荔睹,默認值為(0,-3)揖盘,既陰影有3個點的向上偏移量楷力。為什么是向上偏移呢喊式?這好像有點不合常理,其實這是由‘歷史原因’造成的萧朝,陰影最先是在MacOS平臺上出現的岔留,默認是向下偏移3個點,我們知道MacOS的坐標系統(tǒng)和iOS坐標系統(tǒng)y軸方向是相反的检柬,所以在iOS系統(tǒng)中由于y軸方向的改變就變成了默認向上偏移3個點献联。
-
陰影的路徑
除了通過上面的操作,我們還可以設定陰影的路徑
//路徑陰影
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointMake(-5, -5)];
//添加直線
[path addLineToPoint:CGPointMake(paintingWidth /2, -15)];
[path addLineToPoint:CGPointMake(paintingWidth +5, -5)];
[path addLineToPoint:CGPointMake(paintingWidth +15, paintingHeight /2)];
[path addLineToPoint:CGPointMake(paintingWidth +5, paintingHeight +5)];
[path addLineToPoint:CGPointMake(paintingWidth /2, paintingHeight +15)];
[path addLineToPoint:CGPointMake(-5, paintingHeight +5)];
[path addLineToPoint:CGPointMake(-15, paintingHeight /2)];
[path addLineToPoint:CGPointMake(-5, -5)];
//設置陰影路徑
imgView.layer.shadowPath = path.CGPath;
有關UIBezierPath的知識請看:UIBezierPath介紹
-
陰影輪廓和陰影剪切問題
我們知道CALayer是可以設置邊框的,而且邊框的輪廓是不受子圖層影響的里逆,就像下圖這個樣子:
但是陰影則和邊框有所不同进胯,陰影的輪廓是包含了當前圖層的所有子圖層的輪廓,如圖:
仔細觀察可以看出陰影的輪廓包含了當前圖層和子圖層共同組成的范圍运悲。當然此時masksTobounds的值為NO,如果設置成YES项钮,不單會剪切掉超出當前圖層的子圖層的部分班眯,也會將陰影也剪切到,變成完全看不出陰影的狀態(tài)烁巫。
那如果我們既想剪裁又想實現陰影效果署隘,可能就得通過兩個圖層來實現了:一個只畫陰影的空的外圖層,和一個用masksToBounds剪裁內容的內圖層亚隙,這兩個圖層相同位置大小磁餐。
版權聲明:出自MajorLMJ技術博客的原創(chuàng)作品 ,轉載時必須注明出處及相應鏈接阿弃!