ios开发框架封装(八):UIView拓展,实现【部分圆角、边框、阴影、背景色渐变】随意组合共存

802 阅读2分钟

先放demo地址:github.com/KeWangKW/99…

  • 实现代码在UIViewExt.swift文件,这个类文件中实现的方法,在所有 UIView 的子类上都可用,如UIView、UILabel、UIButton、UITableView................
  • 使用示例在UIViewExtShow.mUIViewExtShow.swift 文件

Layer处理:部分圆角、边框、阴影、背景色渐变

  • gif演示:

屏幕录制2023-07-06 09.59.21.gif

  • kw_setupLayer 方法属性:
    • roundCorners: 圆角位置
    • roundRadius: 圆角角度
    • borderWidth: 边框宽度
    • borderColor: 边框颜色
    • shadowColor: 阴影颜色
    • shadowOffset: 阴影偏移量 :{ width: 2, height: 2 } 右下方偏移
    • shadowOpacity: 阴影透明度
    • shadowRadius: 阴影半径:决定模糊程度
    • gradientColors: 渐变色数组
    • gradientStart: 渐变色开始位置
    • gradientEnd: 渐变色结束位置
  • 圆角:通过 UIBezierPath 实现
    • 使用时 传入 roundCorners、roundRadius 属性值
    • swift:XXXCorners: [.topLeft] ,roundRadius: 35
    • OC:XXXXXCorners:UIRectCornerTopLeft|UIRectCornerBottomLeft roundRadius:35 XXXXX
  • 边框:通过 CAShapeLayer 绘制
    • 使用时传入 borderWidth、borderColor 属性
    • swift:borderWidth: 5 ,borderColor: UIColor.black ,
    • OC:borderWidth:5 borderColor:[UIColor blackColor]
  • 阴影:通过 CAShapeLayer 绘制
    • 但是绘制的view不是当前设置的view,是在此view下方添加了一个view来实现阴影效果
    • 使用时传入 shadowColor、shadowOffset、shadowOpacity、shadowRadius 属性值
    • swift:shadowColor: UIColor.red ,shadowOffset: CGSize(width: 2, height: 2) ,shadowOpacity: 0.6,shadowRadius: 5,
    • OC:shadowColor:[UIColor redColor] shadowOffset:CGSizeMake(2, 2) shadowOpacity:0.6 shadowRadius:5
  • 背景色渐变:通过 CAGradientLayer 实现
    • 同样也是在此view下方添加了一个view来实现渐变效果
    • 使用时传入 gradientColors、gradientStart、gradientEnd 属性
    • swift:gradientColors: [UIColor.red ,UIColor.blue] ,gradientStart: CGPoint(x: 0, y: 0.5) ,gradientEnd: CGPoint(x: 1, y: 0.5)
    • OC:gradientColors:@[[UIColor redColor],[UIColor blueColor]] gradientStart:CGPointMake(0, 0.5) gradientEnd:CGPointMake(1, 0.5)
  • 其他:
    • 请在设置完 layout布局 并且 addsubview 后使用此方法,否则阴影、渐变色 不会有效果
    • 由于是用swift写的,所以在swift上使用比较方便,按需传入属性即可,比如只想实现圆角和渐变效果,传圆角和渐变的属性值即可,边框阴影的属性都有默认值。 但是在OC中使用时,由于OC没有默认值,所以在调用时需要实现所有属性,给不需要的属性值设置默认属性即可。 详看Demo。

UIViewExt 中 获取当前控制器方法

  • kw_currentController
  • 个人一般在 view、cell或其他非UIViewController的类里面处理跳转使用,或者判断当前控制器是否是某个自定义控制器
  • swift:
  • yourView.kw_currentController?.navigationController?.pushViewController(vc, animated: true)
  • OC:
  • [[yourView kw_currentController].navigationController pushViewController:vc animated:true];

UIViewExt 中 添加单击手势方法

  • 简化代码而已,没有特殊处理
  • swift:lab.kw_tapAtion { r in }
  • OC:[lab kw_tapAtion:^(UITapGestureRecognizer * _Nonnull) { }];