我尝试将阴影应用于tableView
cell
,这是四舍五入的。
所以单元格视图的层次结构是:
-TableView
-Cell //height 85
-ContentView //height 85
-View //height 85
-RoundedView //height 65
这就是我应用阴影的方式:
extension UIView{
func dropShadow(x: CGFloat, y: CGFloat, cornerRadius: CGFloat, shadowRadius: CGFloat, color: CGColor, opacity: Float) {
self.layer.cornerRadius = cornerRadius //Give the view corner radius
self.layer.shadowColor = color //Shadow color
self.layer.shadowOffset = CGSize(width: x, height: y)//Offset like in Sketch X and Y
self.layer.shadowRadius = shadowRadius //It should be the blur in Sketch
self.layer.shadowOpacity = 1.0
self.layer.shadowPath = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: .allCorners, cornerRadii: CGSize(width: cornerRadius, height: cornerRadius)).cgPath
self.layer.shouldRasterize = true
self.layer.rasterizationScale = UIScreen.main.scale
}
}
这些是草图属性:
我甚至从Sketch中导出了阴影颜色:
cellShadow = UIColor(hue: 0.643, saturation: 0.061, brightness: 0.906, alpha: 0.5)//Alpha 0.5
这是iPhone上的输出:
这是Sketch中的设计:
为什么影子在iPhone上切割以及为什么颜色有点不同(我使用颜色选择器来查看它是否匹配但是不匹配)?我做错了什么,谁能告诉我?
答案 0 :(得分:2)
首先要注意的是,您已将颜色设置为...
UIColor(hue: 0.643, saturation: 0.061, brightness: 0.906, alpha: 0.5)
这已经包含Sketch的不透明度,因为Sketch定义了颜色中的阴影不透明度。
然后你这样做......
layer.shadowOpacity = 0.5
然后采用该颜色(具有50%不透明度)并对其应用50%的alpha。所以现在你实际上有25%的不透明度。
在定义颜色时,将alpha设置为1.不是0.5。这会使颜色变暗。
您尚未展示如何在Sketch中设置其他阴影属性,以便我现在可以提供所有建议。
修改强>
行...
现在颜色看起来好多了。
切断的原因是你的阴影半径是巨大的! (说真的,它需要那么大吗?通常4或6会削减它.20是过度杀伤。)
发生这种情况的原因是“内容视图”(带有阴影的视图)与单元格边缘之间的距离不足以容纳整个阴影。
您的垂直偏移为5,半径为20,这意味着您需要至少从“内容视图”底部到单元格边缘的距离为25才能完全显示阴影。 (15位于顶部... 20 - 5)。
另一个选项是在单元格上停用clipsToBounds
... cell.clipsToBounds = false
。这样做的缺点是你的阴影可能会发生碰撞,从而导致重叠的黑点。