对iOS控件进行圆角、阴影、背景色渐变

通常在我们的UI当中都会遇到个性化的设计,也是为了满足当下用户的喜好,提高产品的视觉效果!
本文以"UIButton"为例。

UIButton

let button = UIButton.init()
button.frame = CGRect.init(x: 100, y: 100, width: 100, height: 50)
self.view.addSubview(button)

圆角

设置clipsToBounds 和 圆角半径即可实现

  • cornerRadius 圆角半径
 button.clipsToBounds = true    
 button.layer.cornerRadius = 15.0

阴影

阴影的设置是在fram之外进行绘制 因此需要将 clipsToBounds 设置为 false

  • shadowColor 阴影颜色
  • shadowOffset 阴影偏移值 (10,20) 10:表示向下偏移 20:表示向左偏移
  • shadowRadius 渲染阴影的半径
  • shadowOpacity 阴影透明度
button.layer.shadowColor = UIColor.red.cgColor
button.layer.shadowOffset = CGSize.init(width: 0, height: 0)
button.layer.shadowRadius = 10.0;
button.layer.shadowOpacity = 1.0

渐变背景色

设置渐变背景色采用的是 添加 CAGradientLayer 实现,注意添加layer层次问题

  • colors 设置渐变颜色
  • locations 渐变颜色的位置 数量和颜色数组大小等同 值为视图比例[0,1]
  • startPoint 渐变的起点 按比例 同比 anchorPoint
  • endPoint 渐变的终点 按比例
  • 将layer加载到UIButton的layer上 注意添加在最底层 否则会覆盖在button的content之上 造成content不可见
let gradient = CAGradientLayer.init()
gradient.frame = button.bounds;
gradient.colors = [UIColor.red.cgColor, UIColor.green.cgColor]
gradient.locations = [0.2, 0.7];
gradient.startPoint = CGPoint.init(x: 0, y: 0)
gradient.endPoint = CGPoint.init(x: 1, y: 0)
button.layer.insertSublayer(gradient, at: 0)

圆角和阴影同存

根据上面的 圆角、阴影 我们注意到 clipsToBounds 的值是相互冲突的,因此我们需要另辟蹊径进行同时设置。
我们采用的是再添加一个layer到button的父视图layer层来做阴影展示, 设置圆角如上

let shadowLayer = CALayer.init()
shadowLayer.frame = button.frame;
shadowLayer.shadowColor = UIColor.red.cgColor
shadowLayer.shadowOffset = CGSize.init(width: 0, height: 0)
shadowLayer.shadowRadius = 12.0
shadowLayer.shadowOpacity = 0.5
shadowLayer.shouldRasterize = true
shadowLayer.rasterizationScale = UIScreen.main.scale
let path = UIBezierPath.init(roundedRect: button.frame, cornerRadius: button.layer.cornerRadius)
shadowLayer.shadowPath = path.cgPath
button.superview?.layer.insertSublayer(shadowLayer, below: sureButton.layer)

你可能感兴趣的:(对iOS控件进行圆角、阴影、背景色渐变)