Sketch 是 APP 设计的神器,大部分设计师都选择它作为 APP 界面的设计工具。
在 Sketch 里设置一个阴影,效果图和参数如下:
在 iOS 里实现阴影的方式是使用 UIView 的 layer 属性。
layer 里与阴影有关的设置是以下几个属性:
与 Sketch 里阴影参数的对应关系是:
根据上图的对应关系,在代码里实现就是(shadowView 的大小是 100x100):
- let layer = shadowView.layer
- // spread 对应 Sketch 里阴影的 “扩展”,值是 10
- let spread: CGFloat = 10
- var rect = CGRect(x: 0, y: 0, width: 100, height: 100);
- rect = rect.insetBy(dx: -spread, dy: -spread)
- layer.shadowPath = UIBezierPath(rect: rect).cgPath
- // 颜色是黑色( #000000 )
- layer.shadowColor = UIColor.black.cgColor
- // alpha 50
- layer.shadowOpacity = 0.5
- // X: 0 Y: 10
- layer.shadowOffset = CGSize(width: 0, height: 10)
- // 对应 Sketch 里阴影的 “模糊” 的设置,值是 20 / 2 = 10
- layer.shadowRadius = 10
以上代码运行的效果如下:
100% 还原了 Sketch 的设计,完美了。
值得一提的是:layer 阴影和圆角是可以共存的,而且阴影路径也需要考虑圆角的值。
为了使用方便,为 CALayer 添加一个设置阴影的扩展:
- extension CALayer {
- func skt_setShadow(color: UIColor? = .black,
- alpha: CGFloat = 0.5,
- x: CGFloat = 0, y: CGFloat = 2,
- blur: CGFloat = 4,
- spread: CGFloat = 0) {
- shadowOffset = CGSize(width: x, height: y)
- shadowRadius = blur * 0.5
- shadowColor = color?.cgColor
- shadowOpacity = Float(alpha)
- let rect = bounds.insetBy(dx: -spread, dy: -spread)
- let path = UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius)
- shadowPath = path.cgPath
- }
- }
使用很简单,传入的值和 Sketch 里的阴影参数一样就行:
- layer.skt_setShadow(color: .black, alpha: 0.5,
- x: 0, y: 10,
- blur: 20,
- spread: 10)
根据周一发布的《 2020年爱立信移动性报告2020》,在全球范围内,预计将有超过10...
早在去年年底,业内就普遍分析,2020年全球手机市场将面临巨大的不确定性:一方...
就像硬币的两面,技术进步在便利人们生产生活的同时,也带来一个严峻的现实问题...
熟悉微信的小伙伴都知道,除了日复一日的修复了一些已知的问题外,微信的所有新...
5G的推出速度比之前任何一代无线技术都要快。Omdia的研究显示,5G订阅量在20年第...
自 2019 年以来,由政府发起的有关 AI 的倡议在整个亚太地区激增。这些举措包括...
过去十年,中国智能设备市场经历了一系列技术变革、生态系统变革和用户升级。未...
本文转载自公众号读芯术(ID:AI_Discovery) 自驾汽车是汽车业的未来。但目前,无...
岁暮天寒,凛冬已至。这个冬天,三大运营商的日子似乎并不好过。 近日,三大运营...
今日,工信部发布关于侵害用户权益行为的APP通报(2020年第五批)。 工信部称,...