iOS常用宏定义

推荐几个常用的宏定义,大家可以交流沟通,随时补充

  • 判断机型
// 判断是否是 iphone 4
#define isIPhone4 CGSizeEqualToSize(CGSizeMake(320, 480), [[UIScreen mainScreen] bounds].size)
// 判断是否是 iphone 5 / 5s / SE
#define isIPhone5_5s_SE CGSizeEqualToSize(CGSizeMake(320, 568), [[UIScreen mainScreen] bounds].size)
// 判断是否是 iphone 6 / 6s / 7 / 8
#define isIPhone6_6s_7_8 CGSizeEqualToSize(CGSizeMake(375, 667), [[UIScreen mainScreen] bounds].size)
// 判断是否是 iphone 6 Plus / 6s Plus / 7 Plus / 8 Plus
#define isIPhone6p_6sp_7p_8p CGSizeEqualToSize(CGSizeMake(414, 736), [[UIScreen mainScreen] bounds].size)
// 判断是否是 iphone X / Xs / 11 Pro /  12 mini
#define isIPhoneX_Xs_11Pro_12Mini CGSizeEqualToSize(CGSizeMake(375, 812), [[UIScreen mainScreen] bounds].size)
// 判断是否是 iphone Xs Max / XR / 11 / 11 Pro Max
#define isIPhoneXsMax_XR_11_11ProMax CGSizeEqualToSize(CGSizeMake(414, 896), [[UIScreen mainScreen] bounds].size)
// 判断是否是 iphone 12 / 12 Pro
#define isIPhone12_12Pro CGSizeEqualToSize(CGSizeMake(390, 844), [[UIScreen mainScreen] bounds].size)
// 判断是否是 iphone 12 Pro Max
#define isIPhone12ProMax CGSizeEqualToSize(CGSizeMake(428, 926), [[UIScreen mainScreen] bounds].size)

// 是否是 刘海儿屏/异形屏
#define isAlien  ([UIScreen mainScreen].bounds.size.height > 736 ? YES : NO)
  • 常用宽高尺寸
// 获取屏幕尺寸
#define Screen_Bounds  [UIScreen mainScreen].bounds
// 屏幕宽度
#define Screen_Width  ([UIScreen mainScreen].bounds.size.width)
// 屏幕高度
#define Screen_Height  ([UIScreen mainScreen].bounds.size.height)
// 状态栏高度
#define STATUS_BAR_H  (isAlien ? 44.f : 20.f)
// 导航栏高度
#define NAVIGATION_BAR_H  (isAlien ? 88.f : 64.f)
// tabBar高度
#define TAB_BAR_H  (isAlien ? (49.f+34.f) : 49.f)
// 安全区域-底部高度
#define SAFE_BOTTOM (isAlien ? 34.f : 0.f)
// 安全区域-底部高度
#define SAFE_TOP (isAlien ? 20.f : 0.f)
  • 常用字体设置
// 默认 常规字体
#define FONT(s) [UIFont systemFontOfSize:s]
// 默认 常规斜体
#define FONT_Italic(s) [UIFont fontWithName:@"HelveticaNeue-Italic" size:s]
// 默认 偏细字体
#define FONT_Light(s) [UIFont fontWithName:@"HelveticaNeue-Light" size:s]
// 默认 偏细斜体
#define FONT_LightItalic(s) [UIFont fontWithName:@"HelveticaNeue-LightItalic" size:s]
// 默认 细体
#define FONT_Thin(s) [UIFont fontWithName:@"HelveticaNeue-Thin" size:s]
// 默认 细斜体
#define FONT_ThinItalic(s) [UIFont fontWithName:@"HelveticaNeue-ThinItalic" size:s]
// 默认 加粗字体
#define FONT_Blod(s) [UIFont boldSystemFontOfSize:s]
// 默认 加粗斜体
#define FONT_BoldItalic(s) [UIFont fontWithName:@"HelveticaNeue-BoldItalic" size:s]
// 默认 中粗字体
#define FONT_Medium(s) [UIFont fontWithName:@"HelveticaNeue-Medium" size:s]
// 默认 中粗斜体
#define FONT_MediumItalic(s) [UIFont fontWithName:@"HelveticaNeue-MediumItalic" size:s]

// 平方细体
#define PF_THIN(s) [UIFont fontWithName:@"PingFangSC-Thin" size:s]
// 平方字体加粗
#define PF_Medium(s)  [UIFont fontWithName:@"PingFangSC-Medium" size:s]
  • 设置圆角,角标,坐标

// 设置 控件 边框角标,宽度,颜色
#define ViewBorderRadius(View, Radius, Width, Color)\
\
[View.layer setCornerRadius:(Radius)];\
[View.layer setBorderWidth:(Width)];\
[View.layer setBorderColor:[Color CGColor]]

// 设置 控件 角标
#define ViewRadius(View,Radius)\
\
[View.layer setCornerRadius:(Radius)];\
[View.layer setMasksToBounds:YES]

//设置坐标
#define BMCGRect(x, y, w, h) CGRectMake(x, y, w, h)

//设置角标
#define TabbarBedge(index,x)\
\
UITabBarItem * item=[self.tabBarController.tabBar.items objectAtIndex:index];\
item.badgeValue=[NSString stringWithFormat:x]

//清空角标
#define CleanTabbarBedge(index)\
\
UITabBarItem * tabItem=[self.tabBarController.tabBar.items objectAtIndex:index];\
tabItem.badgeValue = nil
  • 加载图片
// 获取本地图片进行加载
#define ImageNamed(fileName) [UIImage imageNamed:fileName]
  • 系统信息,APP信息
//获取系统版本
#define IOS_VERSION                                   [[[UIDevice currentDevice] systemVersion] floatValue]
//APP版本号  1.0.1
#define APPVersion                                    [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]
//APPbuild版本号
#define APPBuildVersion                               [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]
//获取应用名称
#define APP_NAME                                      [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleDisplayName"]
// 获取当前系统语言
#define CurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])
  • 主要应用单例项
// 信息存储
#define UserDefaults                                [NSUserDefaults standardUserDefaults]
// 消息中心
#define NotificationCenter                          [NSNotificationCenter defaultCenter]
// 获取application
#define SharedApplication                           [UIApplication sharedApplication]
// 工程 bundle
#define Bundle                                      [NSBundle mainBundle]
// 主屏幕
#define MainScreen                                  [UIScreen mainScreen]
// 设备 uuid
#define Device_UUID [[NSUUID UUID] UUIDString]
  • 强弱引用
/**
 * 强弱引用转换,用于解决代码块(block)与强引用self之间的循环引用问题
 * 调用方式: `@weakify_self`实现弱引用转换,`@strongify_self`实现强引用转换
 *
 * 示例:
 * @weakify_self
 * [obj block:^{
 * @strongify_self
 * self.property = something;
 * }];
 */

#ifndef    weakify_self
#if __has_feature(objc_arc)
#define weakify_self autoreleasepool{} __weak __typeof__(self) weakSelf = self;
#else
#define weakify_self autoreleasepool{} __block __typeof__(self) blockSelf = self;
#endif
#endif
#ifndef    strongify_self
#if __has_feature(objc_arc)
#define strongify_self try{} @finally{} __typeof__(weakSelf) self = weakSelf;
#else
#define strongify_self try{} @finally{} __typeof__(blockSelf) self = blockSelf;
#endif
#endif

/**
 * 强弱引用转换,用于解决代码块(block)与强引用对象之间的循环引用问题
 * 调用方式: `@weakify(object)`实现弱引用转换,`@strongify(object)`实现强引用转换
 *
 * 示例:
 * @weakify(object)
 * [obj block:^{
 * @strongify(object)
 * strong_object = something;
 * }];
 */

#ifndef    weakify
#if __has_feature(objc_arc)
#define weakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object;
#else
#define weakify(object) autoreleasepool{} __block __typeof__(object) block##_##object = object;
#endif
#endif
#ifndef    strongify
#if __has_feature(objc_arc)
#define strongify(object) try{} @finally{} __typeof__(object) strong##_##object = weak##_##object;
#else
#define strongify(object) try{} @finally{} __typeof__(object) strong##_##object = block##_##object;
#endif
#endif

  • 颜色
// 随机颜色
#define randomColor random(arc4random_uniform(256), arc4random_uniform(256), arc4random_uniform(256), arc4random_uniform(256))
//rgb取色 + 透明度
#define RGBA(r,g,b,a)  [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:a]
//rgb取色 
#define RGB(r,g,b)  RGBA(r,g,b,1)
// 0xffffff 16进制取色
#define RGBHex(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 WHITECOLOR [UIColor whiteColor]
// 黑色
#define BLACKCOLOR [UIColor blackColor]
// 青色
#define CYANCOLOR [UIColor cyanColor]
// 透明
#define CLEARCOLOR [UIColor clearColor]
// 绿色
#define GREENCOLOR [UIColor greenColor]
  • 杂项
// 是否是NULL
#define ISNULL(x) ((x) == nil || [x isEqual:[NSNull null]] ? @"" : (x))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 1.处理NSLog事件(开发模式打印,发布模式不打印)#ifdef DEBUG#define NSLog(FORM...
    HelloRyan阅读 1,152评论 2 1
  • 字符串是否为空 数组是否为空 字典是否为空 是否是空对象 获取屏幕宽度与高度 ( " \ ":连接行标志,连接上下...
    为什么划船不靠桨阅读 378评论 0 0
  • 自己常用宏定义 /*打印信息*/#ifdef DEBUG#define BRYLog( s, ... ) prin...
    Y_3c23阅读 517评论 0 2
  • pch 文件路径 build settings 搜索Prifixheader $(SRCROOT)/黄色的文件...
    星9星阅读 193评论 0 0
  • [123](file://) 宏定义原文链接 全局打印 打印所在方法名与行数 重写NSLog 输出所在方法与行数 ...
    JC_Wang阅读 295评论 0 0