让iOS开发变得更有效率-分类、工具类
在工作中整理的一些分类与工具类,分享给大家。这些工具类可以减少项目中的代码量,让代码变得更简洁,可以大大的提升项目的效率,直接拖到项目中使用即可。下载地址:https://github.com/leeSmile/tools/tree/master/textTools 欢迎start
分类
NSString+LXExtension
1.根据文件名计算文件大小
2.快速生成缓存/文档/临时目录路径
3.根据文字返回文本占用的高度/宽度
4.MD5加密
/**
* md5加密
*/
+ (NSString*)md5HexDigest:(NSString*)input;
/**
* 根据文件名计算出文件大小
*/
- (unsigned long long)lx_fileSize;
/**
* 生成缓存目录全路径
*/
- (instancetype)cacheDir;
/**
* 生成文档目录全路径
*/
- (instancetype)docDir;
/**
* 生成临时目录全路径
*/
- (instancetype)tmpDir;
/**
* @brief 根据字数的不同,返回UILabel中的text文字需要占用多少Size
* @param size 约束的尺寸
* @param font 文本字体
* @return 文本的实际尺寸
*/
- (CGSize)textSizeWithContentSize:(CGSize)size font:(UIFont *)font;
/**
* @brief 根据文本字数/文本宽度约束/文本字体 求得text的Size
* @param width 宽度约束
* @param font 文本字体
* @return 文本的实际高度
*/
- (CGFloat)textHeightWithContentWidth:(CGFloat)width font:(UIFont *)font;
/**
* @brief 根据文本字数/文本宽度约束/文本字体 求得text的Size
* @param height 宽度约束
* @param font 文本字体
* @return 文本的实际长度
*/
- (CGFloat)textWidthWithContentHeight:(CGFloat)height font:(UIFont *)font;
UIImage+LXExtension
1.快速生成圆形图片
2.给定一个不要渲染的图片名称,生成一个最原始的图片
3.模糊效果
4.固定宽高
5.剪切图片某一部分
6.将自身填充到指定的size
- (instancetype)lx_circleImage;
// 生成一个圆形图片
+ (instancetype)lx_circleImageNamed:(NSString *)name;
// 给定一个不要渲染的图片名称,生成一个最原始的图片
+ (UIImage *)imageWithOriginalImageName:(NSString *)imageName;
// 模糊效果(渲染很耗时间,建议在子线程中渲染)
- (UIImage *)blurImage;
- (UIImage *)blurImageWithMask:(UIImage *)maskImage;
- (UIImage *)blurImageWithRadius:(CGFloat)radius;
- (UIImage *)blurImageAtFrame:(CGRect)frame;
// 灰度效果
- (UIImage *)grayScale;
// 固定宽度与固定高度
- (UIImage *)scaleWithFixedWidth:(CGFloat)width;
- (UIImage *)scaleWithFixedHeight:(CGFloat)height;
// 平均的颜色
- (UIColor *)averageColor;
// 裁剪图片的一部分
- (UIImage *)croppedImageAtFrame:(CGRect)frame;
// 将自身填充到指定的size
- (UIImage *)fillClipSize:(CGSize)size;
UIView+LXExtension
1.快速设置控件frame
2.快速根据xib生成View
3.判断两个view是否重叠
/**
* 快速设置控件的位置
*/
@property (nonatomic, assign) CGSize lx_size;
@property (nonatomic, assign) CGFloat lx_width;
@property (nonatomic, assign) CGFloat lx_height;
@property (nonatomic, assign) CGFloat lx_x;
@property (nonatomic, assign) CGFloat lx_y;
@property (nonatomic, assign) CGFloat lx_centerX;
@property (nonatomic, assign) CGFloat lx_centerY;
/**
* 快速根据xib创建View
*/
+ (instancetype)lx_viewFromXib;
/**
* 判断self和view是否重叠
*/
- (BOOL)lx_intersectsWithView:(UIView *)view;
UITextField+LXExtension
1.设置textField的占位文字颜色
/** 占位文字颜色 */
@property (nonatomic, strong) UIColor *lx_placeholderColor;
UIBarButtonItem+LXExtension
1.快速自定义导航栏上的按钮
+ (instancetype)lx_itemWithImage:(NSString *)image highImage:(NSString *)highImage target:(id)target action:(SEL)action;
NSDate+LXExtension
1.两个时间之间的时间间隔
2.是否为今天,昨天,明天
3.当前是周几
@interface LXDateItem : NSObject
@property (nonatomic, assign) NSInteger day;
@property (nonatomic, assign) NSInteger hour;
@property (nonatomic, assign) NSInteger minute;
@property (nonatomic, assign) NSInteger second;
@end
@interface NSDate (LXExtension)
- (LXDateItem *)lx_timeIntervalSinceDate:(NSDate *)anotherDate;
- (BOOL)lx_isToday;
- (BOOL)lx_isYesterday;
- (BOOL)lx_isTomorrow;
- (BOOL)lx_isThisYear;
//获取今天周几
- (NSInteger)getNowWeekday;
@end
NSDictionary+PropertyCode
1.根据字典快速生成Property属性
使用场景:根据网络请求返回的字典数据,写对应的模型。当属性多时,用手写很费功夫,可用这个类快速打印出所有的模型属性,直接粘贴即可
// 生成所需要的属性代码
- (void)propertyCode;
NSObject+JSON
1.字典或对象转成JSON字符串数据
/**
* 字典或对象转成JSON字符串数据
*/
@property (nonatomic, copy, readonly) NSString *JSONString;
工具类
Single:快速创建一个单例
#ifndef Single_h
#define Single_h
#ifdef __OBJC__
#pragma mark - 单例模式 .h文件内容
#define SingleInterface(name) +(instancetype)share##name;
#pragma mark - 单例模式 .m文件内容
#if __has_feature(objc_arc)
#define SingleImplementation(name) +(instancetype)share##name {return [[self alloc]init];} \\
+ (instancetype)allocWithZone:(struct _NSZone *)zone { \\
static id instance; \\
static dispatch_once_t onceToken; \\
dispatch_once(&onceToken, ^{ \\
instance = [super allocWithZone:zone]; \\
}); \\
return instance; \\
} \\
- (id)copyWithZone:(NSZone *)zone{return self;} \\
- (id)mutableCopyWithZone:(NSZone *)zone {return self;}
#else
#define SingleImplementation(name) +(instancetype)share##name {return [[self alloc]init];} \\
+ (instancetype)allocWithZone:(struct _NSZone *)zone { \\
static id instance; \\
static dispatch_once_t onceToken; \\
dispatch_once(&onceToken, ^{ \\
instance = [super allocWithZone:zone]; \\
}); \\
return instance; \\
} \\
- (id)copyWithZone:(NSZone *)zone{return self;} \\
- (id)mutableCopyWithZone:(NSZone *)zone {return self;} \\
- (instancetype)retain {return self;} \\
- (instancetype)autorelease {return self;} \\
- (oneway void)release {} \\
- (NSUInteger)retainCount {return MAXFLOAT;} \\
#endif
#endif
#endif /* Single_h */
HelperUtil:常用的正则表达式
#pragma 正则匹配邮箱号
+ (BOOL)checkMailInput:(NSString *)mail;
#pragma 正则匹配手机号
+ (BOOL)checkTelNumber:(NSString *) telNumber;
#pragma 正则匹配用户密码6-18位数字和字母组合
+ (BOOL)checkPassword:(NSString *) password;
#pragma 正则匹配用户姓名,20位的中文或英文
+ (BOOL)checkUserName : (NSString *) userName;
#pragma 正则匹配用户身份证号
+ (BOOL)checkUserIdCard: (NSString *) idCard;
#pragma 正则匹员工号,12位的数字
+ (BOOL)checkEmployeeNumber : (NSString *) number;
#pragma 正则匹配URL
+ (BOOL)checkURL : (NSString *) url;
#pragma 正则匹配昵称
+ (BOOL) checkNickname:(NSString *) nickname;
#pragma 正则匹配以C开头的18位字符
+ (BOOL) checkCtooNumberTo18:(NSString *) nickNumber;
#pragma 正则匹配以C开头字符
+ (BOOL) checkCtooNumber:(NSString *) nickNumber;
#pragma 正则匹配银行卡号是否正确
+ (BOOL) checkBankNumber:(NSString *) bankNumber;
#pragma 正则匹配17位车架号
+ (BOOL) checkCheJiaNumber:(NSString *) CheJiaNumber;
#pragma 正则只能输入数字和字母
+ (BOOL) checkTeshuZifuNumber:(NSString *) CheJiaNumber;
#pragma 车牌号验证
+ (BOOL) checkCarNumber:(NSString *) CarNumber;
LXFileManagerp:将对象取归档到沙盒,读取存储删除沙盒及偏好设置的数据
/// 文件管理类
@interface LXFileManager : NSObject
/// 把对象归档存到沙盒里
+(void)saveObject:(id)object byFileName:(NSString*)fileName;
/// 通过文件名从沙盒中找到归档的对象
+(id)getObjectByFileName:(NSString*)fileName;
/// 根据文件名删除沙盒中的 plist 文件
+(void)removeFileByFileName:(NSString*)fileName;
/// 存储用户偏好设置 到 NSUserDefults
+(void)saveUserData:(id)data forKey:(NSString*)key;
/// 读取用户偏好设置
+(id)readUserDataForKey:(NSString*)key;
/// 删除用户偏好设置
+(void)removeUserDataForkey:(NSString*)key;
LXMacro:便利宏,便捷定义@property属性
/** copy */
//NSString
#define String_(name) \\
zzn_copy_property(NSString*,name)
//NSArray
#define Array_(name) \\
zzn_copy_property(NSArray*,name)
//NSDictionary
#define Dictionary_(name) \\
zzn_copy_property(NSDictionary*,name)
//NSNumber,它没用对应的不可变类,其实用copy或strong没有区别
#define Number_(name) \\
zzn_copy_property(NSNumber*,name)
//NSData
#define Data_(name) \\
zzn_copy_property(NSData*,name)
//NSSet
#define Set_(name) \\
zzn_copy_property(NSSet*,name)
//NSIndexSet
#define IndexSet_(name) \\
zzn_copy_property(NSIndexSet*,name)
//代码块,名称和传参,没有传参就不填
#define Block_(name,...) \\
zzn_set_block(void,name,__VA_ARGS__)
//有返回值的代码块
#define BlockReturn_(name,returnClass,...) \\
zzn_set_block(returnClass,name,__VA_ARGS__)
………………………………
LocalPushCenter:快速使用本地通知
+ (NSDate *)fireDateWithWeek:(NSInteger)week
hour:(NSInteger)hour
minute:(NSInteger)minute
second:(NSInteger)second;
//本地发送推送(先取消上一个 再push现在的)
+ (void)localPushForDate:(NSDate *)fireDate
forKey:(NSString *)key
alertBody:(NSString *)alertBody
alertAction:(NSString *)alertAction
soundName:(NSString *)soundName
launchImage:(NSString *)launchImage
userInfo:(NSDictionary *)userInfo
badgeCount:(NSUInteger)badgeCount
repeatInterval:(NSCalendarUnit)repeatInterval;
#pragma mark - 退出
+ (void)cancelAllLocalPhsh;
+ (void)cancleLocalPushWithKey:(NSString *)key;
让iOS开发变得更有效率-分类、工具类的更多相关文章
- iOS开发--换肤简单实现以及工具类的抽取
一.根据美工提供的图片,可以有两种换肤的方案. <1>美工提供图片的类型一: <2>美工提供图片的类型二:这种分了文件夹文件名都一样的情况,拖入项目后最后用真实文件夹(蓝色文件 ...
- spring 第一篇(1-1):让java开发变得更简单(下)
切面(aspects)应用 DI能够让你的软件组件间保持松耦合,而面向切面编程(AOP)能够让你捕获到在整个应用中可重用的组件功能.在软件系统中,AOP通常被定义为提升关注点分离的一个技术.系统由很多 ...
- spring 第一篇(1-1):让java开发变得更简单(下)转
spring 第一篇(1-1):让java开发变得更简单(下) 这个波主虽然只发了几篇,但是写的很好 上面一篇文章写的很好,其中提及到了Spring的jdbcTemplate,templet方式我之前 ...
- iOS开发一个制作Live Photo的工具
代码地址如下:http://www.demodashi.com/demo/13339.html 1.livePhoto简介 livePhoto是iOS 9.0 之后系统相机提供的拍摄动态照片的功能,但 ...
- iOS 开发人员不可缺少的75个工具
原文出处: Ben Scheirman 译文出处: Njuxjy 假设你去到一位熟练的木匠的工作室,你总是能发现他/她有一堆工具来完毕不同的任务. 软件开发相同如此. 你能够从软件开发人员怎样使用工具 ...
- IOS开发之功能模块--自定义导航控制器类常用自定义的代码
前言:本文篇幅不多,但是涉及到的内容却是开发中常用的. 涉及的内容: 1.统一设置导航控制器子控制器的返回按钮. 2.因为修改了系统的返回按钮,所以还需要设置手势事件. 3.隐藏底部的工具条. 这里直 ...
- 分享iOS开发常用(三方类库,工具,高仿APP,实用网站,技术干货)
一 . JSONModel (三方类库会有更新,建议大家在线下载) http://pan.baidu.com/s/1i5ybP1z 二.AFNetworkiong http://pan.baidu. ...
- Facebook发布Tweaks:让微调iOS应用变得更简单
假设,你正在开发一款iOS应用. 你的iOS应用有很多动画效果,而你(或你的设计师)希望让那些动画效果的持续时间恰到好处.那华丽的抽屉特效是应该耗时半秒钟,还是四分之三秒呢? 通常情况下,开发者会对合 ...
- spring 第一篇(1-1):让java开发变得更简单(上)
1.释放POJOS能量 传统开发中是如何束缚POJOS呢,如果你开发过java很长时间,那你一定有接触过EJB的开发.那时候开发一个小小的功能都要扩展框架的类或者实现其接口.所以你很容易在早期的Str ...
随机推荐
- 模拟键盘输入 : SendMessage, keybd_event, PostKeybdMessage
转自模拟键盘输入 : SendMessage, keybd_event, PostKeybdMessage 目的 最近项目要求在Windows CE下模拟键盘输入,上网搜索了一下,发现有3个API可以 ...
- Qt, QT/E, Qtopia 的区别
转自Qt, QT/E, Qtopia 的区别 Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等.由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Q ...
- Cloud Insight!StatsD 系监控产品新宠!
年关将至,Cloud Insight 正式版悄然上线了.没有大张旗鼓的宣传,也没有热热闹闹的庆祝,只是一群人在上线前踏踏实实的优化了两周,然后发版,就是这样一件简单的事. 然而就是这样一个低调的产品, ...
- SQL中EXISTS和IN用法
SQL中EXISTS的用法 指定一个子查询,检测行的存在. 语法:EXISTS subquery 参数:subquery 是一个受限的 SELECT 语句 (不允许有 COMPUTE 子句和 INT ...
- usb.ids
# # List of USB ID's # # Maintained by Vojtech Pavlik <vojtech@suse.cz> # If you have any new ...
- King(差分约束)
http://poj.org/problem?id=1364 题意真心看不大懂啊... 现在假设有一个这样的序列,S={a1,a2,a3,a4...ai...at}其中ai=a*si,其实这句可以忽略 ...
- UVA_393_Doors_(计算几何基础+最短路)
描述 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=5&page ...
- OracleParameter 的使用(参数名要以:开头,不允许包含@等特殊字符)[转]
在使用OracleParameters时,CommandText 中的参数要以":"开头,不能包含@等特殊字符.而在其它地方引用到此参数时可以不必加上":",程 ...
- Problem 2214 Knapsack problem 福建第六届省赛
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2214 题目大意:给你T组数据,每组有n个物品,一个背包容量B,每件有体积和价值.问你这个背包容纳的物品最大价值 ...
- [SAM4N学习笔记]按键程序(中断方式)
一.准备工作: 将上一节搭建的工程复制一份,命名为"6.key interrupt".这一节主要讲如何使用SAM4N的GPIO中断功能,实现按键的中断输入. 二.程序编写 ...