Swift中的阴影与Sketch完全不同

时间:2018-03-08 10:14:03

标签: swift sketchapp

我尝试将阴影应用于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
    }
}

这些是草图属性:

enter image description here enter image description here

我甚至从Sketch中导出了阴影颜色:

cellShadow = UIColor(hue: 0.643, saturation: 0.061, brightness: 0.906, alpha: 0.5)//Alpha 0.5

这是iPhone上的输出:

enter image description here

这是Sketch中的设计:

enter image description here

为什么影子在iPhone上切割以及为什么颜色有点不同(我使用颜色选择器来查看它是否匹配但是不匹配)?我做错了什么,谁能告诉我?

1 个答案:

答案 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。这样做的缺点是你的阴影可能会发生碰撞,从而导致重叠的黑点。

但是,TBH只是缩小半径而问题就消失了:D