項目中碰到一個問題,在tableview的headerview裏面有很一個子view,設計師的要求是在下方添加一個陰影,效果以下:spa
之前的實現思路就是,代碼以下:設計
添加陰影
調用視圖的 layercode
CALayer *layer = [imageView layer]; layer.shadowOffset = CGSizeMake(0, 3); //(0,0)時是四周都有陰影 layer.shadowRadius = 5.0; layer.shadowColor = [UIColor blackColor].CGColor; layer.shadowOpacity = 0.5;
設置單邊陰影,代碼以下:blog
向左偏移10 (-10,0) 向右偏移10 (10,0) 向上偏移10 (0,-10) 向下偏移10 (0,10)
可是效果不是特別理想,能夠用貝塞爾曲線進行設置,可是沒起到做用,還沒找到緣由,還有就是一個坑,就是給子view添加陰影,前面我正常寫陰影竟然沒有出現,ip
先看下成功實現的代碼:ci
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;
這樣的話,陰影是能夠成功設置的,it
沒有成功,分析緣由:由於代碼中設置了masksToBounds屬性爲YES了,將後面設置的陰影效果給裁剪掉了,因此咱們看不到陰影效果,若是咱們將masksToBounds屬性爲NO了,這樣就會失去圓角效果(儘管會出現陰影效果),因此須要向一個一箭雙鵰的辦法來解決這個問題。table
給View添加一個父視圖,在父視圖上添加陰影效果就好,這樣就不會對imageView的圓角形成影響了。class
說明:cli
clipsToBounds
是指視圖上的子視圖,若是超出父視圖的部分就截取掉,
masksToBounds
倒是指視圖的圖層上的子圖層,若是超出父圖層的部分就截取掉
可是,仍是不美觀,能夠在目標view的下方,初始化一個view,然是設置陰影半徑,Y座標向上偏移view的高度+陰影的半徑,而後就能夠實現了!
如圖:
僅作記錄!