当前位置:主页 > 查看内容

在iOS里 100% 还原 Sketch 实现的阴影效果

发布时间:2021-07-25 00:00| 位朋友查看

简介:Sketch 是 APP 设计的神器,大部分设计师都选择它作为 APP 界面的设计工具。 在 Sketch 里设置一个阴影,效果图和参数如下: (Sketch 里的效果) (Sketch 里的阴影参数) 开发实现 在 iOS 里实现阴影的方式是使用 UIView 的 layer 属性。 layer 里与阴影有关的……

Sketch 是 APP 设计的神器,大部分设计师都选择它作为 APP 界面的设计工具。

在 Sketch 里设置一个阴影,效果图和参数如下:

在iOS里 100% 还原 Sketch 实现的阴影效果

(Sketch 里的效果)

在iOS里 100% 还原 Sketch 实现的阴影效果

(Sketch 里的阴影参数)

开发实现

在 iOS 里实现阴影的方式是使用 UIView 的 layer 属性。

layer 里与阴影有关的设置是以下几个属性:

  • shadowPath
  • shadowColor
  • shadowOpacity
  • shadowOffset
  • shadowRadius

与 Sketch 里阴影参数的对应关系是:

  • shadowPath ~> 阴影的范围
  • shadowColor ~> 阴影的颜色
  • shadowOpacity ~> 阴影的透明度
  • shadowOffset ~> X 和 Y
  • shadowRadius ~> 阴影的模糊

在iOS里 100% 还原 Sketch 实现的阴影效果

(layer 属性和 Sketch 阴影的对应关系)

根据上图的对应关系,在代码里实现就是(shadowView 的大小是 100x100):

  1. let layer = shadowView.layer 
  2. // spread 对应 Sketch 里阴影的 “扩展”,值是 10 
  3. let spread: CGFloat = 10 
  4. var rect = CGRect(x: 0, y: 0, width: 100, height: 100); 
  5. rect = rect.insetBy(dx: -spread, dy: -spread) 
  6.  
  7. layer.shadowPath = UIBezierPath(rect: rect).cgPath 
  8. // 颜色是黑色( #000000 ) 
  9. layer.shadowColor = UIColor.black.cgColor 
  10. // alpha 50 
  11. layer.shadowOpacity = 0.5 
  12. // X: 0  Y: 10 
  13. layer.shadowOffset = CGSize(width: 0, height: 10) 
  14. // 对应 Sketch 里阴影的 “模糊” 的设置,值是 20 / 2 = 10 
  15. layer.shadowRadius = 10 

以上代码运行的效果如下:

在iOS里 100% 还原 Sketch 实现的阴影效果

(实现效果)

100% 还原了 Sketch 的设计,完美了。

值得一提的是:layer 阴影和圆角是可以共存的,而且阴影路径也需要考虑圆角的值。

为了使用方便,为 CALayer 添加一个设置阴影的扩展:

  1. extension CALayer { 
  2.     func skt_setShadow(color: UIColor? = .black, 
  3.                        alpha: CGFloat = 0.5, 
  4.                        x: CGFloat = 0, y: CGFloat = 2, 
  5.                        blur: CGFloat = 4, 
  6.                        spread: CGFloat = 0) { 
  7.         shadowOffset = CGSize(width: x, height: y) 
  8.         shadowRadius = blur * 0.5 
  9.         shadowColor = color?.cgColor 
  10.         shadowOpacity = Float(alpha) 
  11.  
  12.         let rect = bounds.insetBy(dx: -spread, dy: -spread) 
  13.         let path = UIBezierPath(roundedRect: rect, cornerRadius: cornerRadius) 
  14.         shadowPath = path.cgPath 
  15.     } 

使用很简单,传入的值和 Sketch 里的阴影参数一样就行:

  1. layer.skt_setShadow(color: .black, alpha: 0.5, 
  2.                     x: 0, y: 10,  
  3.                     blur: 20,  
  4.                     spread: 10) 

本文转载自网络,原文链接:https://juejin.im/post/5dd4cd71f265da0bf80b5820
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐