ios開發之--為父view上的子view添加陰影


項目中碰到一個問題,在tableview的headerview里面有很一個子view,設計師的要求是在下方添加一個陰影,效果如下:

以前的實現思路就是,代碼如下:

添加陰影 
調用視圖的 layer

CALayer *layer = [imageView layer];  
layer.shadowOffset = CGSizeMake(0, 3); //(0,0)時是四周都有陰影
layer.shadowRadius = 5.0;  
layer.shadowColor = [UIColor blackColor].CGColor;  
layer.shadowOpacity = 0.5;

設置單邊陰影,代碼如下:

向左偏移10 (-100)
向右偏移10 (100)
向上偏移10 (0,-10)
向下偏移10 (010

但是效果不是特別理想,可以用貝塞爾曲線進行設置,但是沒起到作用,還沒找到原因,還有就是一個坑,就是給子view添加陰影,前面我正常寫陰影居然沒有出現,

先看下成功實現的代碼:

self.headerView.showView.layer.shadowColor = KPublickColor.CGColor;
    
    self.headerView.layer.shadowOffset = CGSizeMake(0, 10);
    
    self.headerView.layer.shadowOpacity = 0.4;
    
    self.headerView.layer.shadowRadius = 5.0;
    
    self.headerView.layer.cornerRadius = 5.0;
    
    self.headerView.bgView.clipsToBounds = NO;

這樣的話,陰影是可以成功設置的,

沒有成功,分析原因:因為代碼中設置了masksToBounds屬性為YES了,將后面設置的陰影效果給裁剪掉了,所以我們看不到陰影效果,如果我們將masksToBounds屬性為NO了,這樣就會失去圓角效果(盡管會出現陰影效果),所以需要向一個兩全其美的辦法來解決這個問題。

給View添加一個父視圖,在父視圖上添加陰影效果就好,這樣就不會對imageView的圓角造成影響了。

說明:

clipsToBounds

是指視圖上的子視圖,如果超出父視圖的部分就截取掉,

masksToBounds

卻是指視圖的圖層上的子圖層,如果超出父圖層的部分就截取掉

 

 

但是,還是不美觀,可以在目標view的下方,初始化一個view,然是設置陰影半徑,Y坐標向上偏移view的高度+陰影的半徑,然后就可以實現了!

如圖:

僅做記錄!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM