02-收集

iOS开发中一些简化代码的宏定义

2016-02-16  本文已影响1248人  JerryLMJ

前言

今天将一些简化工程代码的宏定义拿出来分享一下,如果大家也有简化代码的相关经验也可以一起来交流。

Application

#define APPLICATION   [UIApplication sharedApplication]
#define APPDLE        (AppDelegate*)[APPLICATION delegate]

布局相关
在纯代码的工程中,由于oc语法本身并不是很简洁的特性,控件布局会占有很大篇幅的代码,如果将一些位置、大小、中心、间隙等写成简短明了的宏定义,就会大大增加代码的可读性(当然Masonry框架也是一个不错的选择)。

传参frame对象,获取frame的相关属性值

#define FRAME_ORIGIN(aFrame)              ((aFrame).origin)
#define FRAME_X(aFrame)                   ((aFrame).origin.x)
#define FRAME_Y(aFrame)                   ((aFrame).origin.y)

#define FRAME_SIZE(aFrame)                ((aFrame).size)
#define FRAME_HEIGHT(aFrame)              ((aFrame).size.height)
#define FRAME_WIDTH(aFrame)               ((aFrame).size.width)

/*修改frame对象的x、y、width、height属性值*/ 
#define FRAME_CHANGE_X(aFrame,x)          CGRectMake(x, (aFrame).origin.y, (aFrame).size.width, (aFrame).size.height)
#define FRAME_CHANGE_Y(aFrame,y)          CGRectMake((aFrame).origin.x, y, (aFrame).size.width, (aFrame).size.height)
#define FRAME_CHANGE_WIDTH(aFrame,w)      CGRectMake((aFrame).origin.x, (aFrame).origin.y, w, (aFrame).size.height)
#define FRAME_CHANGE_HEIGHT(aFrame,h)     CGRectMake((aFrame).origin.x, (aFrame).origin.y, (aFrame).size.width, h)

// 向左移动offset位移后得到frame对象
#define FRAME_MOVE_Left(aFrame,offset)    CGRectMake((aFrame).origin.x-(offset), (aFrame).origin.y, (aFrame).size.width, (aFrame).size.height)
// 向右移动offset位移后得到frame对象
#define FRAME_MOVE_Right(aFrame,offset)   CGRectMake((aFrame).origin.x+(offset), (aFrame).origin.y, (aFrame).size.width, (aFrame).size.height)
// 向上移动offset位移后得到frame对象
#define FRAME_MOVE_Up(aFrame,offset)      CGRectMake((aFrame).origin.x, (aFrame).origin.y-(offset), (aFrame).size.width, (aFrame).size.height)
// 向下移动offset位移后得到frame对象
#define FRAME_MOVE_Down(aFrame,offset)    CGRectMake((aFrame).origin.x, (aFrame).origin.y+(offset), (aFrame).size.width, (aFrame).size.height)

传参view对象,获取viewframebounds相关属性值

#define VIEW_BOUNDS(aView)       ((aView).bounds)

#define VIEW_FRAME(aView)        ((aView).frame)

#define VIEW_ORIGIN(aView)       ((aView).frame.origin)
#define VIEW_X(aView)            ((aView).frame.origin.x) 
#define VIEW_Y(aView)            ((aView).frame.origin.y)

#define VIEW_SIZE(aView)         ((aView).frame.size)
#define VIEW_HEIGHT(aView)       ((aView).frame.size.height)  // 视图高度
#define VIEW_WIDTH(aView)        ((aView).frame.size.width)   // 视图宽度

其实本来以下两个宏按照语义想要写成VIEW_Right_X(aView)
VIEW_Bottom_Y(aView),但是由于XCode的自动提示,写成以下形式就会在自动提示列表中与VIEW_X(aView)VIEW_Y(aView)两个宏并列,更方便选择

#define VIEW_X_Right(aView)      ((aView).frame.origin.x + (aView).frame.size.width)  // 视图右边界x坐标
#define VIEW_Y_Bottom(aView)     ((aView).frame.origin.y + (aView).frame.size.height) // 视图底部y坐标
#define VIEW_CENTER(aView)       ((aView).center)
#define VIEW_CENTER_X(aView)     ((aView).center.x)
#define VIEW_CENTER_Y(aView)     ((aView).center.y)
#define Space_(space)  (space) // 表示整形、浮点型间距

屏幕坐标、尺寸相关

// 状态栏占用高度
#define StateBarHeight          20.f
// 状态栏底部y坐标
#define OffsetStateBarHeight    ((DEVICE_OS_VERSION_VALUE >= 7.0)? StateBarHeight : 0.f)

// 顶部状态栏占用高度
#define TopNavBarHeight         40.f
// 顶部导航栏底部y坐标
#define OffsetTopNavBarHeight   (OffsetStateBarHeight + TopNavBarHeight)

// 底部导航栏占用高度
#define BottomTabBarHeight      40.f


// 屏幕高度
#define ScreenHeight            [[UIScreen mainScreen] bounds].size.height
// 屏幕宽度
#define ScreenWidth             [[UIScreen mainScreen] bounds].size.width

// 屏幕可操作高度
#define MainHeight              ((DEVICE_OS_VERSION_VALUE >= 7.0)? ScreenHeight : (ScreenHeight - StateBarHeight))
// 屏幕可操作宽度
#define MainWidth               ScreenWidth

// 去除上下导航栏剩余中间视图高度
#define ContentHeight           (MainHeight -OffsetTopNavBarHeight -BottomTabBarHeight)

设备系统相关

// x
#define IS_iPhoneX        ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)
// 6P、6sP、7P、8P
#define IS_iPhone678_Plus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)
// 6、6s、7、8
#define IS_iPhone678      ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)
// 5、5s
#define IS_iPhone5        ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
// 3g、4、4s
#define IS_iPhone34       ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)
// 是否是Retina屏幕
#define IS_Retina      ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? [[UIScreen mainScreen] currentMode].size.width > 320 : NO)
// app版本号
#define DEVICE_APP_VERSION       (NSString *)[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]
// app Build版本号
#define DEVICE_APP_BUILD         (NSString *)[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]

// 系统版本号(string)
#define DEVICE_OS_VERSION        [[UIDevice currentDevice] systemVersion]
// 系统版本号(float)
#define DEVICE_OS_VERSION_VALUE  [DEVICE_OS_VERSION floatValue]
#define IS_IOSVersion_4          (DEVICE_OS_VERSION_VALUE >= 4.0  && DEVICE_OS_VERSION_VALUE < 5.0)
#define IS_IOSVersion_5          (DEVICE_OS_VERSION_VALUE >= 5.0  && DEVICE_OS_VERSION_VALUE < 6.0)
#define IS_IOSVersion_6          (DEVICE_OS_VERSION_VALUE >= 6.0  && DEVICE_OS_VERSION_VALUE < 7.0)
#define IS_IOSVersion_7          (DEVICE_OS_VERSION_VALUE >= 7.0  && DEVICE_OS_VERSION_VALUE < 8.0)
#define IS_IOSVersion_8          (DEVICE_OS_VERSION_VALUE >= 8.0  && DEVICE_OS_VERSION_VALUE < 9.0)
#define IS_IOSVersion_9          (DEVICE_OS_VERSION_VALUE >= 9.0  && DEVICE_OS_VERSION_VALUE < 10.0)
#define IS_IOSVersion_10         (DEVICE_OS_VERSION_VALUE >= 10.0 && DEVICE_OS_VERSION_VALUE < 11.0)
#define IS_IOSVersion_11         (DEVICE_OS_VERSION_VALUE >= 11.0 && DEVICE_OS_VERSION_VALUE < 12.0)

字体相关

#define FONT_SIZE(f)            [UIFont systemFontOfSize:(f)]
#define FONT_BOLD_SIZE(f)       [UIFont boldSystemFontOfSize:(f)]
#define FONT_ITALIC_SIZE(f)     [UIFont italicSystemFontOfSize:(f)]
#define IS_SmallScreen (IS_iPhone5 || IS_iPhone4)

#define MaxFontSize    (IS_SmallScreen ? 21.f : 25.f )
#define LagerFontSize  (IS_SmallScreen ? 17.f : 19.f )
#define BigFontSize    (IS_SmallScreen ? 15.f : 17.f )
#define NormalFontSize (IS_SmallScreen ? 13.f : 15.f )
#define SmallFontSize  (IS_SmallScreen ? 11.f : 13.f )
#define MinFontSize    (IS_SmallScreen ? 9.f  : 11.f )

颜色相关

#define COLOR_Clear           [UIColor clearColor]
#define COLOR_White           [UIColor whiteColor]
#define COLOR_Black           [UIColor blackColor]
#define COLOR_Red             [UIColor redColor]
#define COLOR_DarkGray        [UIColor darkGrayColor]
#define COLOR_LightGray       [UIColor lightGrayColor]
#define COLOR_GrayColor       [UIColor grayColor]
#define COLOR_Green           [UIColor greenColor]
#define COLOR_BlueColor       [UIColor blueColor]
#define COLOR_Cyan            [UIColor cyanColor]
#define COLOR_Yellow          [UIColor yellowColor]
#define COLOR_Magenta         [UIColor magentaColor]
#define COLOR_Orange          [UIColor orangeColor]
#define COLOR_Purple          [UIColor purpleColor]
#define COLOR_Brown           [UIColor brownColor]
#define RGBCOLOR(r,g,b)       [UIColor colorWithRed:(r)/255.f green:(g)/255.f blue:(b)/255.f alpha:1.f]
#define RGBACOLOR(r,g,b,a)    [UIColor colorWithRed:(r)/255.f green:(g)/255.f blue:(b)/255.f alpha:(a)]
#define HexCOLOR(HexStr)      [UIColor colorWithHexString:HexStr]
+ (UIColor *)colorWithHexString:(NSString *)color{
    return [self colorWithHexString:color alpha:1.0f];
}


+ (UIColor *)colorWithHexString:(NSString *)color alpha:(CGFloat)alpha{
    NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
    
    // String should be 6 or 8 characters
    if ([cString length] < 6) {
        return [UIColor clearColor];
    }
    
    // strip 0X if it appears
    if ([cString hasPrefix:@"0X"])
        cString = [cString substringFromIndex:2];
    if ([cString hasPrefix:@"#"])
        cString = [cString substringFromIndex:1];
    if ([cString length] != 6)
        return [UIColor clearColor];
    
    // Separate into r, g, b substrings
    NSRange range;
    range.location = 0;
    range.length = 2;
    
    //r
    NSString *rString = [cString substringWithRange:range];
    
    //g
    range.location = 2;
    NSString *gString = [cString substringWithRange:range];
    
    //b
    range.location = 4;
    NSString *bString = [cString substringWithRange:range];
    
    // Scan values
    unsigned int r, g, b;
    [[NSScanner scannerWithString:rString] scanHexInt:&r];
    [[NSScanner scannerWithString:gString] scanHexInt:&g];
    [[NSScanner scannerWithString:bString] scanHexInt:&b];
    
    return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:alpha];
}

字符串相关

#define StrOfInterger(interger)  [NSString stringWithFormat:@"%ld",(long)(interger)]
#define StrOfFloat(float)        [NSString stringWithFormat:@"%f",(float)]

Image相关

#define IMG_Name(imgName)        [UIImage imageNamed:(imgName)]

#define IMG_ImgWidth(img)        ((img).size.width)
#define IMG_ImgHeight(img)       ((img).size.height)

校验相关

#define STRINGHASVALUE(str)  (str && [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length > 0)
#define IsCanUseString(str)     ((str != nil) && ![str isKindOfClass:[NSNull class]] && [str isKindOfClass:[NSString class]] && [str length] > 0 )
#define IsCanUseArray(arr)      ( arr && (arr != nil) && ![arr isKindOfClass:[NSNull class]] )
#define IsCanUseDic(dic)        ( dic && (dic != nil) && ![dic isKindOfClass:[NSNull class]] )
#define IsCanUseObj(obj)        ( obj && (obj != nil) && ![obj isKindOfClass:[NSNull class]] )
#define IsNullClass(class)      [class isKindOfClass:[NSNull class]]

打印相关

// mark(NSString类型参数)为打印内容标题
#define NSLOG_Str(mark,str)       NSLog(@"##%@##--str:%@--",(mark),(str))
#define NSLOG_Int(mark,int)       NSLog(@"##%@##--int:%ld--",(mark),(int))
#define NSLOG_Float(mark,float)   NSLog(@"##%@##--float:%f--",(mark),(float))
#define NSLOG_Bool(mark,bool)     NSLog(@"##%@##--bool:%@--",(mark),(bool) ? @"YES" : @"NO")
#define NSLOG_Point(mark,point)   NSLog(@"##%@##--x:%f--y:%f--",(mark),(point).x,(point).y)
#define NSLOG_Size(mark,size)     NSLog(@"##%@##--width:%f--height:%f--",(mark),(size).width,(size).height)
#define NSLOG_Frame(mark,frame)   NSLog(@"##%@##--x:%f--y:%f--width:%f--height:%f--",(mark),(frame).origin.x,(frame).origin.y,(frame).size.width,(frame).size.height)

版权声明:出自MajorLMJ技术博客的原创作品 ,转载时必须注明出处及相应链接!

上一篇下一篇

猜你喜欢

热点阅读