ZZBase
ZZBase是一个封装了开发中常用功能的基础工具库。支持iOS11及以上版本。
基于ZZBase的一些自定义组件ZZCustomControl
Foundation框架
Array
/// 防止数组越界
subscript(index: Int, safe: Bool) -> Element?
func zz_objAt(index:Int) -> Element?
/// 获取一个元素的Index
func zz_index(of object: Element) -> Int?
/// 删除一个元素
mutating func zz_remove(_ obj: Element)
mutating func zz_remove(_ index: Int)
/// 获取数组中元素的 某一个属性值
func zz_subValues(_ keyValue:((_ element:Element) -> String?)) -> [String]
/// 将数组字符串拼接成一个字符串 用 splice 隔开
func zz_join(_ splice: String, block:@escaping ((Element) -> String)) -> String
func zz_sub(to index: Int) -> [Element]
func zz_sub(frome index: Int) -> [Element]
func zz_sub(in range: NSRange) -> [Element
/// 将数组字符串拼接成一个字符串 用 splice 隔开 Element == String
func zz_join(_ splice: String) -> String
Bundle
/// APP名字
static var zz_bundleName: String
/// APP BundleIdentifier e.g. "com.ibireme.MyApp"
static var zz_bundleID: String
/// APP版本
static var zz_appVersion: String
/// APP Build
static var zz_appBuild: String
/// 是否有新版本号
static var zz_isNewFeature: Bool
Data
var bytes: [UInt8]
var zz_md2: String
var zz_md2Data: Data
var zz_md4: String
var zz_md4Data: Data
var zz_md5: String
var zz_md5Data: Data
var zz_utf8Str: String
Date
static func zz_comps(type:Calendar.Component, date: Date = Date()) -> Int
static func zz_year(date: Date = Date()) -> Int
static func zz_month(date: Date = Date()) -> Int
static func zz_day(date: Date = Date()) -> Int
static func zz_hour(date: Date = Date()) -> Int
static func zz_minute(date: Date = Date()) -> Int
static func zz_second(date: Date = Date()) -> Int
static func zz_weekday(date: Date = Date()) -> Int
static func zz_today(_ formatter:String) -> String
/// 年
var zz_year: String
/// 月
var zz_month: String
/// 日
var zz_day: String
/// 小时
var zz_hour: String
/// 分
var zz_minute: String
/// 秒
var zz_seconds: String
/// 星期几 1:星期日 ~~~ 7:星期六
var zz_weekDay: Int
/// 当前时间是否是今天
var zz_isToday: Bool
/// 当前年是否是闰年
var zz_isLeapYear: Bool
/// 时间戳 精确到毫秒
var zz_timeStamp: TimeInterval
/// 星期几 自定义中文标题(周一/星期一/礼拜一)
func zz_weekDay(title: String? = "星期") -> String
/// 比较当前时间和另一个时间的前后
func zz_compare(date: Date, formatter: String = "yyyy-MM-dd HH:mm:ss") -> ComparisonResult
/// 一个月有多少天
func zz_monthTotalDays(calendar: Calendar = Calendar.current) -> Int
/// 根据date获取偏移指定天数的date year = 1表示1年后的时间 year = -1为1年前的日期,month day 类推
func zz_year(offset: Int, calendar: Calendar = Calendar.current) -> Date?
/// 根据date获取偏移指定月数的date year = 1表示1年后的时间 year = -1为1年前的日期,month day 类推
func zz_month(offset: Int, calendar: Calendar = Calendar.current) -> Date?
/// 根据date获取偏移指定天数的date year = 1表示1年后的时间 year = -1为1年前的日期,month day 类推
func zz_day(offset: Int, calendar: Calendar = Calendar.current) -> Date?
/// 将Date转成字符串
func zz_dateString(_ formatterStr: String, calendar: Calendar.Identifier? = nil) -> String
/// 时间戳转时间
static func zz_dateString(_ timeStamp: TimeInterval, to formatter: String = "yyyy-MM-dd", calendar: Calendar.Identifier? = nil) -> String
/// 字符串转Date
static func zz_date(_ dateStr: String, formatter: String = "yyyy-MM-dd", calendar: Calendar.Identifier? = nil) -> Date?
/// 将一个时间格式的时间转换成另一个时间格式的时间
static func zz_date(_ dateStr: String, formatter: String, changeTo changeToFormatter: String) -> String?
/// 判断两个时间年月日是否相等
func zz_equalDay(day: Date) -> Bool
/// 将Date对象转成app需要的时间格式的字符串 "刚刚" "\(seconds/60)分钟前" "\(seconds/3600)小时前" "昨天 HH:mm"
func zz_dateToRequiredTimeStr(calendar: Calendar = Calendar.current) -> String
/// 农历月
var zz_chineseMonth: String
/// 农历日
var zz_chineseDay: String
/// 时辰
var zz_chineseHour: String
Dictionary
mutating func zz_append(dic:Dictionary) -> Void
var zz_allKeys: [Key]
NSObject+KVO
func zz_addObservers(_ keyPaths:[String], key: String = "", options: NSKeyValueObservingOptions = [.old,.new], block:@escaping NSObject.ObserverBlockTargetAlias)
func zz_addObserver(_ keyPath: String, key: String = "", options: NSKeyValueObservingOptions = [.old,.new], block:@escaping NSObject.ObserverBlockTargetAlias)
func zz_removeObserver(_ keyPath: String, key: String)
func zz_removeObservers(_ keyPaths: [String], key: String)
func zz_removeObserver(_ keyPath: String)
func zz_remoAllObservers()
NSObject运行时Set Get
func zz_objc_set(key: String, _ newValue: Any?,_ policy: objc_AssociationPolicy = .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
func zz_objc_get<T>( key: String, _ type: T.Type) -> T?
String
var zz_md5: String
/// base64编码
var zz_base64Encoded: String?
/// base64解码
var zz_base64Decoded: String?
/// utf-8 Data
var zz_utf8: Data?
/// 16进制字符串转Data
var zz_hex: Data?
var zz_last: String
var zz_first: String
var zz_pinyin: String
var zz_formatJson: String
var zz_intValue: Int
var zz_doubleValue: Double
var zz_floatValue: CGFloat
/// 判断是否是小数
var zz_isFloat: Bool
/// 计算是否是整数
var zz_isInt: Bool
/// 判断是否是手机号码
var zz_isPhone: Bool
/// 是否是固话
var zz_isTelPhone: Bool
/// 判断是否是身份证号码
var zz_isIdCard: Bool
///判断是否是6位验证码
var zz_isCode_6: Bool
/// 是否是IP地址
var zz_isIP: Bool
/// 判断是否是邮箱
var zz_isEmail:Bool
/// 判断是否是中文
var zz_isChinese:Bool
/// 判断是否是链接
var zz_isURL:Bool
/// 计算文字的Size
func zz_textSize(font: UIFont, maxSize: CGSize) -> CGSize
func zz_sub(from index: Int) -> String
func zz_sub(to index: Int) -> String
func zz_sub(range index: NSRange) -> String
func zz_sub(from: Int, length: Int) -> String
func zz_hidden(range index: NSRange, replace: String = "*") -> String
/// 替换length之后文本
func zz_replace(from index: Int, to toString:String = "") -> String
/// 将字符串每隔数位用分割符隔开 如将【123456】分割成【123,456】
func zz_partition(gap: Int = 3, seperator: Character = ",") -> String
/// 判断字符位数是否在区间内
func zz_isLength(min:Int, max:Int) -> Bool
/// 添加HTML结构
var zz_addHtml: String
/// 将字符串转换成HTML富文本
func zz_htmlAttri(font: UIFont? = UIFont.systemFont(ofSize: 16), lineSpacing: CGFloat? = 10) -> NSMutableAttributedString
UI
UIDevice
/// UUID
static var zz_uuid: String
/// 用户手机别名
static var zz_phoneName: String
/// 设备名称
static var zz_systemName: String
/// 设备系统版本
static var zz_systemVersion: String
/// 是否是iPhone X
static var zz_isIPhoneX: Bool
/// 是否是 iphone5 及以下
static var zz_isIphone5OrLess: Bool
/// 是否是iPad
static var zz_isIpad: Bool
/// 是否是iPhone
static var zz_isIphone: Bool
/// 是否是暗黑模式
static var zz_isDarkModel: Bool
/// 是否是Retina
static var zz_isRetina: Bool
/// 是否是模拟器
static var zz_isSimuLator: Bool
/// 设备磁盘
static func zz_disk(_ key: FileAttributeKey) -> String?
/// 设备总磁盘空间
static var zz_diskSpace: Int
/// 设备剩余磁盘空间
static var zz_diskSpaceFree: Int
/// 设备已用磁盘空间
static var zz_diskSpaceUsed: Int
CALayer
/// 删除所有的子Layer
func zz_removeAllSubLayers()
var zz_x: CGFloat
var zz_y : CGFloat
var zz_width : CGFloat
var zz_height: CGFloat
var zz_maxX: CGFloat
var zz_maxY: CGFloat
var zz_size: CGSize
var zz_origin : CGPoint
var zz_center: CGPoint
var zz_centerX: CGFloat
var zz_centerY: CGFloat
var zz_frame: CGRect
CALayer Animation
struct ZZAnimationKey {
public var rawValue: String
public init(rawValue: String) {
self.rawValue = rawValue
}
public static let position = ZZAnimationKey(rawValue: "position") // 移动到另外一个 点(point)
public static let cornerRadius = ZZAnimationKey(rawValue: "cornerRadius") // 圆角动画
public static let transformRotation = ZZAnimationKey(rawValue: "tranform.rotation")
public static let transformRotationX = ZZAnimationKey(rawValue: "tranform.rotation.x")
public static let transformRotationY = ZZAnimationKey(rawValue: "tranform.rotation.y")
public static let transformRotationZ = ZZAnimationKey(rawValue: "tranform.rotation.z")
public static let transformScale = ZZAnimationKey(rawValue: "tranform.scale")
public static let transformScaleX = ZZAnimationKey(rawValue: "tranform.scale.x")
public static let transformScaleY = ZZAnimationKey(rawValue: "tranform.scale.y")
public static let transformScaleZ = ZZAnimationKey(rawValue: "tranform.scale.z")
public static let transformTranslationX = ZZAnimationKey(rawValue: "tranform.translation.x")
public static let transformTranslationY = ZZAnimationKey(rawValue: "tranform.translation.y")
public static let transformTranslationZ = ZZAnimationKey(rawValue: "tranform.translation.z")
}
/// CABasicAnimation 基础动画
/// - Parameters:
/// - key: ZZAnimationKey 动画类型
/// - startValue: 起始值
/// - endValue: 结束值
/// - duration: 动画时间
/// - delay: 动画延迟时间 默认:0
/// - repeatCount: 动画循环次数 默认:1
/// - removedOnCompletion: 动画结束之后位置是否保持不变(即动画结束是否依然在startValue)默认: false
/// - option: 动画方式 linear: 匀速 easeIn: 慢进 easeOut: 慢出 easeInEaseOut: 慢进慢出 default: 慢进慢出 默认:default
@discardableResult func zz_animation(key: ZZAnimationKey,
startValue: Any?,
endValue: Any?,
duration: TimeInterval = 2.0,
delay: TimeInterval = 0,
repeatCount: Float = 1,
removedOnCompletion: Bool = false,
option: CAMediaTimingFunctionName = .default) -> CABasicAnimation
/// CAKeyframeAnimation 基础动画
/// - Parameters:
/// - key: ZZAnimationKey 动画类型
/// - values: 关键帧数组对象,里面每一个元素即为一个关键帧,动画会在对应的时间段内,依次执行数组中每一个关键帧的动画
/// - keyTimes: 设置关键帧对应的时间点,范围:0-1。如果没有设置该属性,则每一帧的时间平分
/// - duration: 动画时间
/// - delay: 动画延迟时间
/// - repeatCount: 动画循环次数
/// - path: 动画路径
/// - removedOnCompletion: 动画结束之后位置是否保持不变 默认: false
/// - option: 动画方式
/// - rotationMode: 旋转方式
@discardableResult func zz_animation(key: ZZAnimationKey,
values: [Any]?,
keyTimes: [NSNumber]?,
duration: TimeInterval = 2.0,
delay: TimeInterval = 0,
repeatCount: Float = 1,
path: CGPath? = nil,
removedOnCompletion: Bool = false,
option: CAMediaTimingFunctionName = .default,
rotationMode: CAAnimationRotationMode? = nil) -> CAKeyframeAnimation
/// CASpringAnimation 基础动画 弹簧效果
/// - Parameters:
/// - key: ZZAnimationKey 动画类型
/// - toValue: 终点位置
/// - delay: 延迟时间
/// - mass: 质量(影响弹簧的惯性,质量越大,弹簧惯性越大,运动的幅度越大)
/// - stiffness: 弹性系数(弹性系数越大,弹簧的运动越快)
/// - damping: 阻尼系数(阻尼系数越大,弹簧的停止越快)
/// - initialVelocity: 初始速率(弹簧动画的初始速度大小,弹簧运动的初始方向与初始速率的正负一致,若初始速率为0,表示忽略该属性)
/// - repeatCount: 动画执行的次数
/// - removedOnCompletion: 运动后的位置保持不变(layer的最后位置是toValue)
/// - option: 动画的时间节奏控制 方式
@discardableResult func zz_animation(key: ZZAnimationKey,
toValue: Any?,
delay: TimeInterval = 0,
mass: CGFloat = 10.0,
stiffness: CGFloat = 50,
damping: CGFloat = 100.0,
initialVelocity: CGFloat = 5,
repeatCount: Float = 1,
removedOnCompletion: Bool = false,
option: CAMediaTimingFunctionName = .default) -> CASpringAnimation
/// CAAnimationGroup 的基类动画
/// - Parameters:
/// - animations: 动画组
/// - duration: 动画时长
/// - delay: 动画时长
/// - repeatCount: 重复次数
/// - removedOnCompletion: 运动后的位置保持不变(layer的最后位置是toValue)
/// - option: 动画的时间节奏控制 方式
@discardableResult func zz_animation_group(_ animations: [CAAnimation]?,
duration: TimeInterval = 2.0,
delay: TimeInterval = 0,
repeatCount: Float = 1,
removedOnCompletion: Bool = false,
option: CAMediaTimingFunctionName = .default) -> CAAnimationGroup
UIApplication
/// "Documents" folder in this app's sandbox.
static var zz_document_url: URL?
static var zz_document_path: String
/// "Caches" folder in this app's sandbox.
static var zz_caches_url: URL?
static var zz_caches_path: String
/// "Library" folder in this app's sandbox.
static var zz_library_url: URL?
static var zz_library_path: String{
UICollectionView
@discardableResult func zz_register<T>(cell cellClass: T.Type, nibName: String? = nil, identifier: String = "\(NSStringFromClass(T.self))_identifier") -> Self where T: UICollectionViewCell
@discardableResult func zz_register<T>(header headerClass: T.Type, nibName: String? = nil, identifier: String = "\(NSStringFromClass(T.self))_identifier") -> Self where T: UICollectionReusableView
@discardableResult func zz_register<T>(footer headerClass: T.Type, nibName: String? = nil, identifier: String = "\(NSStringFromClass(T.self))_identifier") -> Self where T: UICollectionReusableView
func zz_cell<T: UICollectionViewCell>(_ identifier: String = "\(NSStringFromClass(T.self))_identifier",
cellClass: T.Type,
indexPath: IndexPath) -> T
func zz_dequeueReusableSupplementaryView<T: UICollectionReusableView>(ofKind elementKind: String, withReuseIdentifier identifier: String = "\(NSStringFromClass(T.self))_identifier", for indexPath: IndexPath, classType: T.Type) -> T
func zz_header<T: UICollectionReusableView>(_ classType: T.Type, for indexPath: IndexPath, identifier: String = "\(NSStringFromClass(T.self))_identifier") -> T
func zz_footer<T: UICollectionReusableView>(_ classType: T.Type, for indexPath: IndexPath, identifier: String = "\(NSStringFromClass(T.self))_identifier") -> T
UITableView
@discardableResult
func zz_register<T>(cell cellClass: T.Type, nibName: String? = nil, identifier: String = "\(NSStringFromClass(T.self))_identifier") -> Self where T: UITableViewCell
@discardableResult
func zz_register<T>(headerFooter cellClass: T.Type, nibName: String? = nil, identifier: String = "\(NSStringFromClass(T.self))_identifier") -> Self where T: UITableViewHeaderFooterView
func zz_cell(_ style:UITableViewCell.CellStyle = .default, initBlock: ((_ cell: UITableViewCell) -> Void)? = nil) -> UITableViewCell
func zz_cell<T: UITableViewCell>(identifier: String = "\(NSStringFromClass(T.self))_identifier",
cellClass:T.Type,
for indexPath: IndexPath) -> T
func zz_cell<T: UITableViewCell>(identifier: String = "\(NSStringFromClass(T.self))_identifier",
cellClass:T.Type,
style:UITableViewCell.CellStyle = .default,
initBlock:((_ cell:T) -> Void)? = nil) -> T
func zz_headerFooter<T: UITableViewHeaderFooterView>(identifier: String = "\(NSStringFromClass(T.self))HeaderFooter_identifier",
headerFooterClass: T.Type,
initBlock:((_ cell:T) -> Void)? = nil) -> T
UIColor
var r: CGFloat
var g: CGFloat
var b: CGFloat
var a: CGFloat
/// 暗黑模式颜色
static func zz_darkColor(_ light: UIColor,_ dark: UIColor) -> UIColor
/// Color RGB
static func zz_rgba(r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) -> UIColor
/// HEXColor
static func zz_hex(_ hexStr: String, alpha: CGFloat = 1) -> UIColor
/// 获取颜色的RGB
func zz_rgba() -> (r:CGFloat,g:CGFloat,b:CGFloat,a:CGFloat)
/// 修改颜色的透明度
func zz_alpha(_ alpha: CGFloat) -> UIColor
/// 修改颜色的透明度
static func zz_alpha(_ color: UIColor, alpha: CGFloat) -> UIColor
/// 过渡颜色到指定颜色
func zz_transition(to color: UIColor, progress: CGFloat) -> UIColor
/// 生成一个随机色
static func zz_random() -> UIColor
UIControl
/// 添加事件
@discardableResult func zz_addBlock(for events:UIControl.Event, block:@escaping ((_ sender: Any) -> Void)) -> Self
@discardableResult func zz_addTarget(_ target: Any?, action: Selector, for controlEvents: UIControl.Event) -> Self
/// 删除通过block绑定的事件
@discardableResult func zz_removeBlockTarget(for events: UIControl.Event) -> Self
/// 删除所有的点击事件
@discardableResult func zz_removeAllTarget() -> Self
var zz_isEnabled: Bool
@discardableResult func zz_isEnabled(_ enable: Bool) -> Self
var zz_isSelected: Bool
@discardableResult func zz_isSelected(_ selected: Bool) -> Self
UIImage
/// 不透明度
var opaque: Bool
/// 取图片 UIImage.init(named: name)
static func zz_named(_ name:String) -> UIImage?
/// base64转图片
static func zz_base64(_ base64:String) -> UIImage?
/// 使用颜色绘制一张图片
static func zz_image(color: UIColor, size: CGSize = CGSize(width: 1, height: 1)) -> UIImage?
/// 截取View图片
static func zz_snapshot(_ fromeView:UIView?, in frame:CGRect) -> UIImage?
/// 修改图片的颜色
func zz_image(tintColor:UIColor, blendMode: CGBlendMode = .destinationIn, alpha: CGFloat = 1) -> UIImage?
/// 图片修改成圆角
func zz_roundCorner(_ byRoundingCorners: UIRectCorner = UIRectCorner.allCorners, cornerRadii: CGFloat) -> UIImage?
/// 图片修改成圆角
func zz_roundCorner(_ byRoundingCorners: UIRectCorner = UIRectCorner.allCorners, cornerRadii: CGSize) -> UIImage?
/// 旋转 翻折图片
func zz_image(orientation: UIImage.Orientation) -> UIImage
/// 水平翻转图片
func zz_filp() -> UIImage
/// 向右旋转90° ⤼
func zz_rotateRight90() -> UIImag
/// 等比率缩放
func zz_scale(_ scaleSize: CGFloat) -> UIImage?
/// 按照比例拉伸图片
func zz_resizable(_ widthScale: CGFloat,_ heightScale: CGFloat) -> UIImage
/// 根据图片宽度重置图片大小
func zz_resize_w(_ width: CGFloat) -> UIImage?
/// 根据图片高度重置图片大小
func zz_resize_h(_ height: CGFloat) -> UIImage?
/// 重置图片大小 自动根据最大边长适配
func zz_resize(_ maxWidthOrHeight: CGFloat) -> UIImage?
/// 重设图片大小
func zz_resize(_ reSize:CGSize) -> UIImage?
/// 剪切图片
func zz_cropping(in rect: CGRect) -> UIImage?
/// 生成一张二维码
static func zz_qrImage(_ content: String, size: CGSize = CGSize(100) , onColor: UIColor = .black, offColor: UIColor = .white) -> UIImage?
/// 压缩图片数据-不压尺寸
func zz_compress(_ maxLength: Int) -> Data?
/// 压缩图片
func zz_compress_mid(_ maxLength: Int) -> Data?
/// 压缩图片
func zz_compress_image(_ maxLength: Int) -> UIImage?
/// 给图片打上 文字
func zz_draw(text: String, attributed: [NSAttributedString.Key: Any], scale: CGFloat) -> UIImage
UIView
var zz_x: CGFloat
var zz_y : CGFloat
var zz_width : CGFloat
var zz_height: CGFloat
var zz_maxX: CGFloat
var zz_maxY: CGFloat
var zz_size: CGSize
var zz_origin : CGPoint
var zz_center: CGPoint
var zz_centerX: CGFloat
var zz_centerY: CGFloat
var zz_frame: CGRect
var zz_alpha: CGFloat
var zz_borderColor: UIColor
var zz_borderWidth: CGFloat
var zz_cornerRadius: CGFloat
var zz_masksToBounds: Bool
var zz_backgroundColor: UIColor?
var zz_isUserInteractionEnabled: Bool
var zz_isHidden: Bool
@discardableResult func zz_border(width: CGFloat = 0.5, color: UIColor = UIColor.gray, radius: CGFloat? = nil) -> Self
@discardableResult func zz_addSubView(_ view: UIView) -> Self
@discardableResult func zz_addSubView(_ view: UIView, constraint: NSLayoutConstraint) -> Self
@discardableResult func zz_addSubView(_ view: UIView, constraints: [NSLayoutConstraint]) -> Self
/// 一次添加多个子控件
@discardableResult func zz_addSubViews(subviews:[UIView]) -> Self
@discardableResult func zz_addSubViews(subviews:[UIView], constraints: [NSLayoutConstraint]) -> Self
@discardableResult func zz_insertSubView(_ view: UIView, at index: Int) -> Self
@discardableResult func zz_insertSubView(_ view: UIView, belowSubview: UIView) -> Self
@discardableResult func zz_insertSubView(_ view: UIView, aboveSubview: UIView) -> Self
/// 删除所有的字窗体
func zz_removeAllSubViews()
/// 删除本窗体中 选中的子窗体
func zz_remove(_ subViews: [UIView])
/// 找到本窗体中的
func zz_find<T: UIView>(_ Class: T.Type) -> T?
/// 查找当前View是否包含view
func zz_isHave(view: UIView) -> Bool
/// 找到当前控件所在的控制器
func zz_getCurrentViewCtrl() -> UIViewController?
@discardableResult func zz_addTap(target: Any?, action: Selector?) -> Self
/// 添加事件
@discardableResult func zz_addTap(block:@escaping ((_ sender: Any) -> Void)) -> Self
/// 删除通过 zz_addTap 绑定的事件
@discardableResult func zz_removeTap() -> Self
/// 移除渐变层
func zz_removeGradient()
/// 添加一个渐变层 通过KVO监听父试图Frame变化自动改变渐变层Layer的大小
/// - Parameters:
/// - colors: 颜色组
/// - startPoint: 开始位置x,y 在 0~1 之间
/// - endPoint: 结束位置x,y 在 0~1 之间
/// - locations: 渐变不同颜色位置 对应颜色组 0~1之间
@discardableResult func zz_addGradient(colors: [Any]?, start startPoint: CGPoint = CGPoint(x: 0, y: 0.5), end endPoint:CGPoint = CGPoint(x: 1, y: 0.5), locations: [NSNumber] = [0, 1]) -> CAGradientLayer
/// 添加一个渐变层 通过KVO监听父试图Frame变化自动改变渐变层Layer的大小, 在
/// - Parameters:
/// - fColor: 开始颜色
/// - toColor: 结束颜色
/// - startPoint: 开始位置x,y 在 0~1 之间
/// - endPoint: 结束位置x,y 在 0~1 之间
/// - locations: 渐变不同颜色位置 对应颜色组 0~1之间
@discardableResult func zz_addGradient(form fColor: UIColor,to toColor: UIColor,start startPoint: CGPoint = CGPoint(x: 0, y: 0.5), end endPoint:CGPoint = CGPoint(x: 1, y: 0.5), locations: [NSNumber] = [0, 1]) -> CAGradientLayer
/// 圆角
///
/// - Parameters:
/// - corners: 需要实现为圆角的角
/// - radii: 圆角半径
@discardableResult func zz_round(_ corners: UIRectCorner, radii: CGFloat) -> Self
UIViewController
/// NavigationController BackgroundImage
var zz_navBarBgImg: UIImage?
/// Set NavigationController BackgroundImage
@discardableResult func zz_navBarBgImg(_ img: UIImage?) -> Self
/// NavigationController ShadowImage
var zz_shadowImag: UIImage?
/// Set NavigationController ShadowImage
@discardableResult func zz_shadowImag(_ img: UIImage?) -> Self
/// NavigationController ShadowImage
var zz_titleColor: UIColor?
/// Set NavigationController ShadowImage
@discardableResult func zz_titleColor(_ color: UIColor?) -> Self
/// NavigationController TitleText Font
var zz_titleFont: UIFont?
/// Set NavigationController TitleText Font
@discardableResult func zz_titleFont(_ font: UIFont?) -> Self
CG
CGFloat
static let zz_max = CGFloat(MAXFLOAT)
CGPoint
init(_ value: CGFloat)
init(zz_x: CGFloat = 0, zz_y: CGFloat = 0)
var zz_x : CGFloat
@discardableResult mutating func zz_x(_ value: CGFloat) -> Self
var zz_y : CGFloat
@discardableResult mutating func zz_y(_ value: CGFloat) -> Self
static func += (left:inout CGPoint, right: CGPoint)
static func -= (left:inout CGPoint, right: CGPoint)
static func + (left:CGPoint, right: CGPoint) -> CGPoint
static func - (left:CGPoint, right: CGPoint) -> CGPoint
CGRect
init(zz_x: CGFloat = 0, zz_y: CGFloat = 0, zz_w: CGFloat = 0, zz_h: CGFloat = 0)
var zz_x : CGFloat
@discardableResult mutating func zz_x(_ value: CGFloat) -> Self{
var zz_y : CGFloat
@discardableResult mutating func zz_y(_ value: CGFloat) -> Self
var zz_width : CGFloat
@discardableResult mutating func zz_width(_ value: CGFloat) -> Self
var zz_height : CGFloat
@discardableResult mutating func zz_height(_ value: CGFloat) -> Self
static func += (left:inout CGRect, right: CGRect)
static func -= (left:inout CGRect, right: CGRect)
static func + (left:CGRect, right: CGRect) -> CGRect
static func - (left:CGRect, right: CGRect) -> CGRect
CGSize
init(_ value: CGFloat)
init(zz_w width: CGFloat = 0, zz_h height: CGFloat = 0)
var zz_width : CGFloat
@discardableResult mutating func zz_width(_ value: CGFloat) -> Self
var zz_height : CGFloat
@discardableResult mutating func zz_height(_ value: CGFloat) -> Self
static func += (left:inout CGSize, right: CGSize)
static func -= (left:inout CGSize, right: CGSize)
static func + (left:CGSize, right: CGSize) -> CGSize
static func - (left:CGSize, right: CGSize) -> CGSize
UIEdgeInsets
init(zz_top: CGFloat = 0, zz_left: CGFloat = 0, zz_bottom: CGFloat = 0, zz_right: CGFloat = 0)
var zz_top : CGFloat
@discardableResult mutating func zz_top(_ value: CGFloat) -> Self
var zz_left : CGFloat
@discardableResult mutating func zz_left(_ value: CGFloat) -> Self
var zz_bottom : CGFloat
@discardableResult mutating func zz_bottom(_ value: CGFloat) -> Self
var zz_right : CGFloat
@discardableResult mutating func zz_right(_ value: CGFloat) -> Self
static func += (left:inout UIEdgeInsets, right: UIEdgeInsets)
static func -= (left:inout UIEdgeInsets, right: UIEdgeInsets)
static func + (left: UIEdgeInsets, right: UIEdgeInsets) -> UIEdgeInsets
static func - (left: UIEdgeInsets, right: UIEdgeInsets) -> UIEdgeInsets
File
public struct Directory: Equatable {
public var rawValue: String
public init(rawValue: String) {
self.rawValue = rawValue
}
public static let documents = Directory(rawValue: "/Documents")
public static let library = Directory(rawValue: "/Library")
public static let caches = Directory(rawValue: "/Library/Caches")
public static let temp = Directory(rawValue: "/tmp")
public static let bundle = Directory(rawValue: "/bundle")
}
/// 获取文件夹路径
/// - Parameter directory: 文件夹类型(当bundle时 为空)
/// - Returns: 文件夹路径
@discardableResult
public static func path(for directory: Directory, intermediates: String = "") -> String
/// 获取文件路径
/// - Parameters:
/// - directory: 文件夹类型
/// - intermediates: 中间路径
/// - filename: 文件名(带后缀;如:xxx.png)
/// - Returns: 文件路径
@discardableResult
public static func filePath(for directory: Directory, intermediates: String = "", filename: String) -> String
/// 创建文件
/// - Parameters:
/// - directory: 文件主路径
/// - folderName: 文件路径
/// - intermediates: 是否创建中间目录
/// - attributes: 属性
/// - Returns: 是否创建成功
static func create(directory: Directory, folderName: String, intermediates: Bool = true, attributes: [FileAttributeKey: Any]? = nil) -> Bool
/// 写入文件
/// - Parameters:
/// - filePath: 文件路径
/// - content: 内容
/// - options: 默认先创建一个临时文件,直到文件内容写入成功再导入到目标文件里。 如果为NO,则直接写入目标文件里。
/// - Returns: 是否成功
static func write(to filePath: String, content: Data, options: Data.WritingOptions = []) -> Bool
/// 读取文件内容
/// - Parameter filePath: 文件路径
/// - Returns: 内容 Data
static func read(_ filePath: String) -> Data?
/// 删除文件
/// - Parameter filePath: 文件路径
/// - Returns: 是否删除成功
static func delete(_ filePath: String) -> Bool
/// 重命名文件
/// - Parameters:
/// - fromPath: 文件原始路径
/// - toPath: 文件新路径
/// - Returns: 是否重命名文件成功
static func rename(from fromPath: String, to toPath: String) -> Bool
/// 移动文件
/// - Parameters:
/// - fromPath: 文件原始路径
/// - toPath: 文件新路径
/// - Returns: 是否移动文件成功
static func move(from fromPath: String, to toPath: String) -> Bool
/// 拷贝文件
/// - Parameters:
/// - fromPath: 文件原始路径
/// - toPath: 文件新路径
/// - Returns: 是否拷贝文件成功
static func copy(from fromPath: String, to toPath: String) -> Bool
/// 文件是否可写
/// - Parameter path: 文件路径
/// - Returns: 是否可写
static func isWritable(at path: String) -> Bool
/// 文件是否可读
/// - Parameter path: 文件路径
/// - Returns: 是否可读
static func isReadable(at path: String) -> Bool
/// 文件是否存在
/// - Parameter path: 文件路径
/// - Returns: 是否存在
static func exists(path: String) -> Bool {
return FileManager.default.fileExists(atPath: path)
}
/// 文件是否存在
/// - Parameter url: 文件路径
/// - Returns: 是否存在
static func exists(url: URL) -> Bool
/// 获取文件列表
/// - Parameter folderPath: 文件夹路径
/// - Returns: 文件列表
static func filePathList(folderPath: String) -> [String]
示例
要运行示例项目,请克隆仓库,并首先在示例目录中运行pod install
要求
安装
CocoaPods
ZZBase可通过CocoaPods获取。要安装,只需将以下行添加到您的Podfile中
pod 'ZZBase'
Swift包管理器
将其添加到Package.swift的依赖值中
dependencies: [
.package(url: "https://github.com/CZ410/ZZBase.git", .upToNextMajor(from: "0.2.0"))
]
作者
CzzBoom,[email protected]
许可证
ZZBase遵循MIT许可证。有关更多信息,请参阅LICENSE文件。