單獨給圖片唇礁、按鈕設置圓角或者陰影效果比較簡單,但是如果這兩個同時設置惨篱、最后再設置上背景圖片盏筐,就會發(fā)現不是圓角沒了,就是陰影沒了砸讳。琢融。。
先說一下ImageView吧簿寂,開始的時候因為我沒有拿到UI切圖漾抬,所以先給它設置了一個背景顏色,然后設置了圓角和陰影陶耍。
let cardView = UIImageView()
cardView.backgroundColor = UIColor.blue
// 設置圓角
cardView.layer.cornerRadius = 10
cardView.layer.masksToBounds = true
// 設置陰影
cardView.layer.shadowColor = UIColor.gray.cgColor
cardView.layer.shadowOpacity = 0.8
cardView.layer.shadowOffset = CGSize(width: 0, height: 4)
view.addSubview(cardView)
// 設置約束
cardView.snp.makeConstraints { (make) in
make.top.equalToSuperview().offset(100)
make.centerX.equalToSuperview()
make.size.equalTo(CGSize(width: 300, height: 150))
}
結果發(fā)現圓角有了奋蔚,陰影卻并沒有出來。烈钞。泊碑。
于是發(fā)現,是因為layer的masksToBounds設置成true導致把它范圍之外的部分給裁剪掉了毯欣,所以陰影也被干掉了馒过,于是我把masksToBounds的設置去掉了(默認為false)
cardView.layer.masksToBounds = false
結果發(fā)現圓角和陰影就都有了
然而事情并沒有結束,因為當UI切圖出來之后酗钞,我設置了一張圖片腹忽,結果發(fā)現圓角又沒有了来累。。窘奏。
于是又一番查閱發(fā)現了一個解決辦法:
在這個imageView的下邊添加一個底部視圖嘹锁,位置約束跟imageView相同,用來專門設置陰影效果着裹,然后把imageView添加到底部視圖上领猾,最后給imageView設置圓角(這次要把masksToBounds設置成true)
// 卡片底部視圖
let cardBgView = UIView()
// 設置陰影
cardBgView.layer.shadowColor = UIColor.gray.cgColor
cardBgView.layer.shadowOpacity = 0.6
cardBgView.layer.shadowOffset = CGSize(width: 0, height: 4)
view.addSubview(cardBgView)
// 卡片
let cardView = UIImageView()
cardView.image = #imageLiteral(resourceName: "ren")
// 設置圓角
cardView.layer.cornerRadius = 10
cardView.layer.masksToBounds = true
cardBgView.addSubview(cardView)
// 設置約束
cardBgView.snp.makeConstraints { (make) in
make.top.equalToSuperview().offset(100)
make.centerX.equalToSuperview()
make.size.equalTo(CGSize(width: 300, height: 150))
}
cardView.snp.makeConstraints { (make) in
make.edges.equalToSuperview()
}
圓角和陰影終于出來了:
按鈕Button
同理,按鈕也是一樣的情況骇扇,如果只給按鈕設置了backgroundColor摔竿,并不會有按壓效果,如果要有按壓效果少孝,就要給button設置BackgroundImage及相應的UIControlState
但是設置之后继低,效果就如同imageView上述情況一樣了,同樣解決方法也用以上方法就能搞定稍走。
除了以上這個方法添加view之外袁翁,好像也可以添加layer來實現,但是因為layer無法設置約束钱磅,還要到viewDidLayoutSubviews方法中設置frame梦裂,所以就放棄了。