zoukankan      html  css  js  c++  java
  • 让iOS开发变得更有效率-分类、工具类

    转自:xiao公子的简书(@Lee枭枭

    在工作中整理的一些分类与工具类,分享给大家。这些工具类可以减少项目中的代码量,让代码变得更简洁,可以大大的提升项目的效率,直接拖到项目中使用即可。

    下载地址https://github.com/leeSmile/tools/tree/master/textTools,欢迎start

    分类

    NSString+LXExtension

    1.根据文件名计算文件大小

    2.快速生成缓存/文档/临时目录路径

    3.根据文字返回文本占用的高度/宽度

    4.MD5加密

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    /**
     *  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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    - (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是否重叠

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    /**
     *  快速设置控件的位置
     */
    @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的占位文字颜色

    1
    2
    /** 占位文字颜色 */
    @property (nonatomic, strong) UIColor *lx_placeholderColor;

    UIBarButtonItem+LXExtension

    1.快速自定义导航栏上的按钮

    1
    + (instancetype)lx_itemWithImage:(NSString *)image highImage:(NSString *)highImage target:(id)target action:(SEL)action;

    NSDate+LXExtension

    1.两个时间之间的时间间隔

    2.是否为今天,昨天,明天

    3.当前是周几

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    @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属性

    使用场景:根据网络请求返回的字典数据,写对应的模型。当属性多时,用手写很费功夫,可用这个类快速打印出所有的模型属性,直接粘贴即可

    1
    2
    3
    4
    5
    6
    7
    8
    // 生成所需要的属性代码
    - (void)propertyCode;
    NSObject+JSON
    1.字典或对象转成JSON字符串数据
    /**
     *  字典或对象转成JSON字符串数据
     */
    @property (nonatomic, copy, readonly) NSString *JSONString;

    工具类

    Single:快速创建一个单例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #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:常用的正则表达式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #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:将对象取归档到沙盒,读取存储删除沙盒及偏好设置的数据

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /// 文件管理类
    @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属性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    /** 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:快速使用本地通知

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    + (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;
     
     
  • 相关阅读:
    #一点杂记
    《洛谷P3373 【模板】线段树 2》
    《Codeforces Round #681 (Div. 2, based on VK Cup 2019-2020
    《牛客练习赛72C》
    《hdu2819》
    《hdu2818》
    《Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)》
    《51nod1237 最大公约数之和 V3》
    对输入的单词进行排序
    快速排序
  • 原文地址:https://www.cnblogs.com/Hakim/p/5642571.html
Copyright © 2011-2022 走看看