iOS开发常用工具类(提高开发的工作效率)
前言
作为一个开发者应该学会去整理收集开发常用的工具类,这些复用的工具可以在项目开发中给你很大程度提高你的工作效率。难道你不想早点完成工作,然后出去撩妹、陪女朋友或者回家陪老婆孩子吗?反正我想早点回家??。
一、常用的宏定义
善于利用宏在开发中过程中会减少很多工作量比如定义开发过程中的常用尺寸,这样在后续开发中不用为了改一个相同尺寸而满世界的去找这个尺寸在哪用到了。宏定义用的很广泛,例如屏幕的宽高,网络请求的baseUrl等等
下面是自己整理的一些示例:
#if TARGET_IPHONE_SIMULATOR//模拟器
#define PHONE_MARK 0
#elif TARGET_OS_IPHONE//真机
#define PHONE_MARK 1
#endif
//16进制颜色转换
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
//屏幕的宽高
#define SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width
#define SCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height
//转化为weak对象(block循环引用使用时)
#define WeakObj(o) __weak typeof(o) obj##Weak = o;
一、UIView的扩展类(category)
在开发中会经常获取或者改变控件的位置大小,所以这样的类别就大有用处了,你可以方便的改变任意位置大小属性(这样在做一些控件的位置大小动画也很方便),废话不多说直接上代码。
UIView+tool.h
#import <UIKit/UIKit.h>
@interface UIView (tool)
#pragma mark [frame]
/**
* view的x(横)坐标
*/
@property (nonatomic, assign)CGFloat v_x;
/**
* view的y(纵)坐标
*/
@property (nonatomic, assign)CGFloat v_y;
/**
* view的宽度
*/
@property (nonatomic, assign)CGFloat v_w;
/**
* view的高度
*/
@property (nonatomic, assign)CGFloat v_h;
#pragma mark [layer]
/**
* view的圆角半径
*/
@property (nonatomic, assign)CGFloat v_cornerRadius;
@end
UIView+tool.m
#import "UIView+tool.h"
@implementation UIView (tool)
#pragma mark [frame]
// [GET方法]
- (CGFloat)v_x{
return self.frame.origin.x;
}
- (CGFloat)v_y{
return self.frame.origin.y;
}
- (CGFloat)v_w{
return self.frame.size.width;
}
- (CGFloat)v_h{
return self.frame.size.height;
}
// [SET方法]
- (void)setV_x:(CGFloat)v_x{
self.frame = CGRectMake(v_x, self.v_y, self.v_w, self.v_h);
}
- (void)setV_y:(CGFloat)v_y{
self.frame = CGRectMake(self.v_x, v_y, self.v_w, self.v_h);
}
- (void)setV_w:(CGFloat)v_w{
self.frame = CGRectMake(self.v_x, self.v_y, v_w, self.v_h);
}
- (void)setV_h:(CGFloat)v_h{
self.frame = CGRectMake(self.v_x, self.v_y, self.v_w, v_h);
}
#pragma mark [layer]
- (CGFloat)v_cornerRadius{
return self.layer.cornerRadius;
}
- (void)setV_cornerRadius:(CGFloat)v_cornerRadius{
self.layer.cornerRadius = v_cornerRadius;
self.layer.masksToBounds = YES;
}
@end
二、NSString的扩展类
在做项目中对字符串的处理是必不可少的,或者要对一些数据进行字符串的转换等等。下面就介绍几个自己在项目中经常使用的方法。下面的category包括:时间戳转化为字符串的各类形式,获取当前设备deviceId和字符串向富文本的转换(哥现在做的项目大部分页面都用到了这东西)。
NSString+tool.h
#import <Foundation/Foundation.h>
static NSString *const XCColorKey = @"color";
static NSString *const XCFontKey = @"font";
static NSString *const XCRangeKey = @"range";
/**
range的校验结果
*/
typedef enum
{
RangeCorrect = 0,
RangeError = 1,
RangeOut = 2,
}RangeFormatType;
@interface NSString (tool)
#pragma mark - 常用工具
/**
* 获取当前Vindor标示符
*
* @return deviceId
*/
+ (NSString *) getDeviceIdentifierForVendor;
/**
* 转换为XXXX年XX月XX日
*
* @param time 时间戳
*
* @return 年月日
*/
+ (NSString*) format:(NSTimeInterval) time;
/**
* 转化为XX时XX分XX秒
*
* @param time 时间戳
*
* @return 时:分:秒
*/
+ (NSString*) formatTime:(NSTimeInterval) time;
/**
* 转化为XXXX年XX月XX日XX时XX分XX秒
*
* @param time 时间戳
*
* @return 年月日 时:分:秒
*/
+ (NSString *) formatDateAndTime:(NSTimeInterval)time;
#pragma mark - 校验NSRange
/**
* 校验范围(NSRange)
*
* @param range Range
*
* @return 校验结果:RangeFormatType
*/
- (RangeFormatType)checkRange:(NSRange)range;
#pragma mark - 改变单个范围字体的大小和颜色
/**
* 改变字体的颜色
*
* @param color 颜色(UIColor)
* @param range 范围(NSRange)
*
* @return 转换后的富文本(NSMutableAttributedString)
*/
- (NSMutableAttributedString *)changeColor:(UIColor *)color
andRange:(NSRange)range;
/**
* 改变字体大小
*
* @param font 字体大小(UIFont)
* @param range 范围(NSRange)
*
* @return 转换后的富文本(NSMutableAttributedString)
*/
- (NSMutableAttributedString *)changeFont:(UIFont *)font
andRange:(NSRange)range;
/**
* 改变字体的颜色和大小
*
* @param colors 字符串的颜色
* @param colorRanges 需要改变颜色的字符串范围
* @param fonts 字体大小
* @param fontRanges 需要改变字体大小的字符串范围
*
* @return 转换后的富文本(NSMutableAttributedString)
*/
- (NSMutableAttributedString *)changeColor:(UIColor *)color
andColorRang:(NSRange)colorRange
andFont:(UIFont *)font
andFontRange:(NSRange)fontRange;
#pragma mark - 改变多个范围内的字体和颜色
/**
* 改变多段字符串为一种颜色
*
* @param color 字符串的颜色
* @param ranges 范围数组:[NSValue valueWithRange:NSRange]
*
* @return 转换后的富文本(NSMutableAttributedString)
*/
- (NSMutableAttributedString *)changeColor:(UIColor *)color andRanges:(NSArray<NSValue *> *)ranges;
/**
* 改变多段字符串为同一大小
*
* @param font 字体大小
* @param ranges 范围数组:[NSValue valueWithRange:NSRange]
*
* @return 转换后的富文本(NSMutableAttributedString)
*/
- (NSMutableAttributedString *)changeFont:(UIFont *)font andRanges:(NSArray<NSValue *> *)ranges;
@end
NSString+tool.m
#import "NSString+tool.h"
@implementation NSString (tool)
+ (NSString *) getDeviceIdentifierForVendor{
return [[UIDevice currentDevice].identifierForVendor UUIDString];
}
+ (NSString*) format:(NSTimeInterval) time;
{
if (time < 0)
{
return @"";
}
NSDateFormatter *formatter;
formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSDate* date = [NSDate dateWithTimeIntervalSince1970:time/1000];
return [formatter stringFromDate:date];
}
+ (NSString*) formatTime:(NSTimeInterval) time;
{
if (time < 0)
{
return @"";
}
NSDateFormatter *formatter;
formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm:ss"];
NSDate* date = [NSDate dateWithTimeIntervalSince1970:time/1000];
return [formatter stringFromDate:date];
}
+ (NSString *) formatDateAndTime:(NSTimeInterval)time;{
if (time < 0) {
return @"";
}
NSDateFormatter *formatter;
formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *date = [NSDate dateWithTimeIntervalSince1970:time/1000];
return [formatter stringFromDate:date];
}
- (RangeFormatType)checkRange:(NSRange)range{
NSInteger loc = range.location;
NSInteger len = range.length;
if (loc>=0 && len>0) {
if (range.location + range.length <= self.length) {
return RangeCorrect;
}
else{
NSLog(@"The range out-of-bounds!");
return RangeOut;
}
}
else{
NSLog(@"The range format is wrong: NSMakeRange(a,b) (a>=0,b>0). ");
return RangeError;
}
}
- (NSMutableAttributedString *)changeColor:(UIColor *)color
andRange:(NSRange)range{
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc]initWithString:self];
if ([self checkRange:range] == RangeCorrect) {
if (color) {
[attributedStr addAttribute:NSForegroundColorAttributeName value:color range:range];
}
else{
NSLog(@"color is nil");
}
}
return attributedStr;
}
- (NSMutableAttributedString *)changeFont:(UIFont *)font
andRange:(NSRange)range{
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc]initWithString:self];
if ([self checkRange:range] == RangeCorrect) {
if (font) {
[attributedStr addAttribute:NSFontAttributeName value:font range:range];
}
else{
NSLog(@"font is nil...");
}
}
return attributedStr;
}
- (NSMutableAttributedString *)changeColor:(UIColor *)color
andColorRang:(NSRange)colorRange
andFont:(UIFont *)font
andFontRange:(NSRange)fontRange{
NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc]initWithString:self];
if ([self checkRange:colorRange] == RangeCorrect) {
if (color) {
[attributedStr addAttribute:NSForegroundColorAttributeName value:color range:colorRange];
}
else{
NSLog(@"color is nil");
}
}
if ([self checkRange:fontRange] == RangeCorrect) {
if (font) {
[attributedStr addAttribute:NSFontAttributeName value:font range:fontRange];
}
else{
NSLog(@"font is nil...");
}
}
return attributedStr;
}
- (NSMutableAttributedString *)changeColor:(UIColor *)color andRanges:(NSArray<NSValue *> *)ranges{
__block NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc]initWithString:self];
if (color) {
[ranges enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSRange range = [(NSValue *)obj rangeValue];
if ([self checkRange:range] == RangeCorrect) {
[attributedStr addAttribute:NSForegroundColorAttributeName value:color range:range];
}
else{
NSLog(@"index:%ld",idx);
}
}];
}
else{
NSLog(@"color is nil...");
}
return attributedStr;
}
- (NSMutableAttributedString *)changeFont:(UIFont *)font andRanges:(NSArray<NSValue *> *)ranges{
__block NSMutableAttributedString *attributedStr = [[NSMutableAttributedString alloc]initWithString:self];
if (font) {
[ranges enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSRange range = [(NSValue *)obj rangeValue];
if ([self checkRange:range] == RangeCorrect) {
[attributedStr addAttribute:NSFontAttributeName value:font range:range];
}
else{
NSLog(@"index:%ld",idx);
}
}];
}
else{
NSLog(@"font is nil...");
}
return attributedStr;
}
@end
下面是转化为富文本的示例代码
UILabel *lable = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, V_SCREEN_WIDTH, 100)];
lable.center = self.view.center;
lable.numberOfLines = 0;
lable.textAlignment = NSTextAlignmentCenter;
lable.textColor = [UIColor blackColor];
lable.font = [UIFont systemFontOfSize:15.0];
[self.view addSubview:lable];
NSString *str = @"这个是绿色字号是20";
//富文本
lable.attributedText = [str changeColor:[UIColor greenColor] andColorRang:NSMakeRange(3, 2) andFont:[UIFont systemFontOfSize:20] andFontRange:NSMakeRange(8, 2)];
效果如图所示
文/volientDuan(简书作者)
原文链接:http://www.jianshu.com/p/eb20c2cc7c36
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
时间: 2024-10-26 07:41:33