Latest 2.1
Homepage https://github.com/zesicus/SNYKit
License MIT
Platforms ios 9.0
Dependencies ReachabilitySwift
Frameworks UIKit
Authors

CI Status
Version
License
Platform

About

日常开发逐渐积累下来的一个 iOS 便利工具集。

主要使用 Swift,还有一些用到的基于 OC 的方法(很多从大环境搜集到的方法,经自己测试和修改确保可用且应用于项目,并在此对借鉴代码的作者们说声谢谢!🙏)。

Installation

可以通过 CocoaPods 的方式去安装:

# Swift 4.2 版本
pod 'SNYKit'

# Swift 4.1 版本
pod 'SNYKit', '1.0.2'

How to Use

SNYKit有一个方法总集 –> SNY,以及对于UIKit基础类的扩展。
下面是详细介绍⤵:

SNY 🍋

Debug环境打印函数

“`Swift
dprint(“hello”)
“`

App状态判断

“`Swift
//判断App是否在前台并且能有效接收事件
SNY.appStates.isForeground

//判断App是否在后台运行
SNY.appStates.isBackground

//判断App是否在非活跃状态,这种状态可能处于正在将App转移到后台或者把app调起到前台时
SNY.appStates.isInactive
“`

具体请参考 `UIApplication.shared.applicationState`

> 除了比较懒的写系统的写法,再就是我也只需要个判断。

屏幕尺寸

* 不说你们都懂得

“`Swift
SNY.screen.frame
SNY.screen.height
SNY.screen.width
SNY.screen.scale
“`

GCD定时器

* 主线程 `GCD.main`
* 高优先后台线程 `GCD.globalHigh`
* 一般后台线程 `GCD.global`
* 标签线程: `GCD.seria(label: “hello”)`
* 分组线程(default组) `GCD.concurrent(label: “hello”)`

* 延迟执行

“`Swift
//延迟 1 秒执行
SNY.gcd.after(time: 1.0, queue: GCD.main) {
dprint(“Hello”)
}
“`

> 当然,上面这个方法也可以用下面定时器执行

* 定时器

“`
//设置循环定时器,1秒执行一次
SNY.gcd.scheduledDispatchTimer(WithTimerName: “hello”, timeInterval: 1.0, queue: GCD.main, repeats: true) {
dprint(“Hello”)
}

//检查定时器是否存在
SNY.gcd.isExistTimer(WithTimerName: “hello”)

//销毁定时器
SNY.gcd.cancleTimer(WithTimerName: “hello”)
“`

App版本

“`Swift
SNY.appVersion
“`

UserDefaults

“`Swift
SNY.defaults.set…
“`

NotificationCenter

“`Swift
SNY.defaultNoti.post…
“`

设备UUID

“`Swift
SNY.uuid
“`

Documents文件夹路径

“`Swift
SNY.documentsPath
“`

运营商信息

返回一个元祖,包含

* 运营商名 carrierName 例 中国联通
* 国家代码(大写) carrierName 例 CN
* 网络制式 networkType 例 4G

“`Swift
SNY.getCarrier()
“`

设备使用权限判断

* 网络使用权限

“`Swift
switch SNY.netPermission {
case .notRestricted:
dprint(“无限制”)
break
case .restricted:
dprint(“网络限制”)
break
case .restrictedStateUnknown:
dprint(“未设置过网络权限时是这个状态”)
break
default:
break
}
“`

* 相册使用权限

“`Swift
switch SNY.photoAlbumPermission {
case .authorized:
dprint(“已授权”)
break
case .denied:
dprint(“已阻止”)
break
case .notDetermined:
dprint(“未知”)
break
case .restricted:
dprint(“未授权,可能是家长控制权限”)
break
}
“`

* 相机使用权限

“`Swift
switch SNY.cameraPermission {
case .authorized:
dprint(“已授权相机”)
break
case .denied:
dprint(“拒绝使用相机”)
break
case .restricted:
dprint(“受限制的”)
break
case .notDetermined:
dprint(“系统未知,可能第一次开启app时状态是这样的”)
break
}
“`

* 麦克风使用权限

“`Swift
switch SNY.microphonePermission {
case .authorized:
dprint(“已授权麦克风”)
break
case .denied:
dprint(“已拒绝麦克风”)
break
case .restricted:
dprint(“受限制的”)
break
case .notDetermined:
dprint(“系统未知,可能第一次开启app时状态是这样的”)
break
}
“`

* 推送权限

“`Swift
if SNY.pushPermission {
dprint(“推送已开启”)
} else {
dprint(“推送未开启/未知”)
}
“`

* 定位权限

“`Swift
if SNY.locationPermission {
dprint(“GPS可用”)
} else {
dprint(“GPS不可用”)
}
“`

SNYOC 🌶

多彩字

* 改变字符串中个别字符的颜色

“`Swift
OCSword.returnColorfulString(“确认授权并同意《用户授权协议》”, keyword: “《用户授权协议》”, color: .mainTheme)
“`

* 改变字符串中许多字符的颜色,比如只把字符串中的数字变色

“`Swift
OCSword.returnColorfulString(“我是(Profile.nickName ?? “”),掘金联盟第 (rankNum) 号成员”, which: [“0”, “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”], color: .mainTheme)
“`

页面过渡效果

* 给你的Layer加一个过渡效果,这样比如Push出来的页面会有不同动画效果,方法里面有详细说明

“`Swift
OCSword.addAnimation(self.view.layer, type: “rotate”)
“`

View controller 截长图

* 生成整个View截图,当然如果想截长图传个ScrollView就好了

“`Swift
OCSword.generateImage(from: self.tableView, size: self.tableView.contentSize)
“`

日期转星期

* 输入日期显示星期几

“`Swift
OCSword.getWeek(Date())
“`

地理位置坐标转化

“`Swift
let snyoc = SNYOC.init(latitude: 123, andLongitude: 123)

//从GPS坐标转化到高德坐标
snyoc?.transformFromGPSToGD().latitude
snyoc?.transformFromGPSToGD().longitude

//从高德坐标转化到百度坐标
snyoc?.transformFromGDToBD().latitude
snyoc?.transformFromGDToBD().longitude

//从百度坐标到高德坐标
snyoc?.transformFromBDToGD().latitude
snyoc?.transformFromBDToGD().longitude

//从高德坐标到GPS坐标
snyoc?.transformFromGDToGPS().latitude
snyoc?.transformFromGDToGPS().longitude

//从百度坐标到GPS坐标
snyoc?.transformFromBDToGPS().latitude
snyoc?.transformFromBDToGPS().longitude
“`

取得当前显示Label里文字数组

* 取得当前显示Label里文字数组,或许你可以拿来判断一下行数,然后判断展开收缩

“`Swift
OCSword.getLinesArrayOfString(in: cell?.detailLabel)
“`

浮动View

* 跳动的View,加载多个类似于蚂蚁森林的感觉

“`Swift
OCSword.jumpAnimationView(jumpView)
“`

检查手机号

* 返回 true 或 false

“`Swift
OCSword.checkTel(“12345”)
“`

Extension扩展 🥝

Int、CGFloat、Double

* 毫秒转Date型日期

“`Swift
12345000.getDate()
“`

* 毫秒转字符型日期

“`Swift
12345000.getStringDate(format: “yyyy-MM-dd HH:mm”)
“`

* 生成随机数

“`Swift
// 生成 0 – Max 中的随机数
Int.random
//生成 0 – n-1 之间的随机数
Int.random(n: 10)
//生成 min – max 之间的随机数
Int.random(min: 1, max: 10)
“`

Date

* 日期转字符串

“`Swift
Date().getStringDate(format: “yyyy-MM-dd HH:mm”)
“`

* 判别时间:刚刚、1分钟前、1小时前…

“`Swift
Date().judgeTime()
“`

String

* 随机MD5,这部分给注释掉了,使用则在桥接文件中`#import `

“`Swift
String.randomMD5()
“`

* 获得字符串宽度

“`Swift
“getw”.getWidth(size: 15)
“`

* HTML字符串本地富文本

“`Swift
“”.html2AttributedString
“`

* HTML字符串本地纯文本

“`Swift
“”.html2String
“`

* 获得带有行间距的字符串,lineSpacing:行间距,charSpacing:字间距

“`Swift
getLineSpacing(lineSpacing: 1, charSpacing: 1)
“`

* 存储文件标记不同步iCloud

“`Swift
path.excludeFromBackup()
“`

* 截取字符串

“`Swift
“12345”.substring(toIndex: 1)
“1123”.substring(fromIndex: 1)
“`

* 字符串转为字符数组

“`Swift
“1123”.toCharArray()
“`

* 播放声音

“`Swift
musicPath.playSound()
“`

UIButton

“`Swift
//左边文字右边图片
thumUpBtn.setTitleRightImgLeft(title: “点赞”, font: UIFont.systemFont(ofSize: 12.0), fontColor: .leastBlack, image: UIImage(named: “like”), dist: 10.0)

//右边文字左边图片
thumUpBtn.setTitleLeftImgRight(title: “点赞”, font: UIFont.systemFont(ofSize: 12.0), fontColor: .leastBlack, image: UIImage(named: “like”), dist: 10.0)
“`

UIColor

* 不用除255的便利方法

“`Swift
UIColor(r: 12, g: 22, b: 125)
“`

* 16进制颜色

“`Swift
UIColor(hex: 0x3E609E)
“`

* 纯色图片

“`Swift
UIColor.red.getImage()
“`

UIImage

* 压缩图片

“`Swift
image.compressImage(toByte: 100 * 1024)
“`

UIImageView

* 填充虚线,注意view的高度

“`Swift
imageView.fillImaginaryLine()
“`

* Kingfisher 需要关闭注释

“`Swift
//设置无缓存网络图片
imageView.setNetImgNoCache(urlString: “http://baidu.com/abc.jpg”)

//设置网络图片
imageView.setNetImg(urlString: “http://baidu.com/abc.jpg”)
“`

UIView

* 适用于提示框弹出的动画展示效果, with后面跟的是阴影遮罩,手动传入

“`Swift
//弹出
exchangeView.animateIn(parentVC: self.navigationController!, with: backgroundView)

//消失
exchangeView.animateOut(with: backgroundView)
“`

UIViewController

* 导航栏左右按钮

“`Swift
//左导航栏图片按钮
addLefttBarButtonItem(navigationItem, image: #imageLiteral(resourceName: “bar_search”), target: self, action: #selector(searchAction))

//右导航栏图片按钮
addRightBarButtonItem(navigationItem, image: #imageLiteral(resourceName: “bar_post”), target: self, action: #selector(rightBtnAction))

//左导航栏文字按钮
addLeftBarButtonItem(navigationItem, title: “左按钮”, titleColor: .red, target: self, action: #selector(leftAction))

//右导航栏文字按钮
addRightBarButtonItem(navigationItem, title: “右按钮”, titleColor: .blue, target: self, action: #selector(rightAction))
“`

License

SNYKit is available under the MIT license. See the LICENSE file for more info.

Latest podspec

{
    "name": "SNYKit",
    "version": "2.1",
    "summary": "Sunnyu7684u4fbfu5229u5de5u5177u96c6.",
    "description": "u65e5u5e38u4f7fu7528uff0cu4e00u822cAppu5e38u7528u5230u7684u65b9u6cd5u6c47u603buff0cu4e0du65adu6269u5145u5b8cu5584u4e2du3002",
    "homepage": "https://github.com/zesicus/SNYKit",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    },
    "authors": {
        "zesicus": "[email protected]"
    },
    "source": {
        "git": "https://github.com/zesicus/SNYKit.git",
        "tag": "2.1"
    },
    "platforms": {
        "ios": "9.0"
    },
    "swift_version": "4.2",
    "source_files": "SNYKit/Classes/**/*",
    "frameworks": "UIKit",
    "dependencies": {
        "ReachabilitySwift": [
            "~> 4.3.0"
        ]
    }
}

Pin It on Pinterest

Share This