iOS 常用的宏定义

1、日志输出

#ifdef DEBUG
// 调试状态
#define NSLog(FORMAT, ...) fprintf(stderr, "%s:%d\t%s\n", [[[NSString stringWithUTF8String: __FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat: FORMAT, ## __VA_ARGS__] UTF8String]);
#else
// 发布状态
#define NSLog(...) nil;

#endif

2、判断设备

#define mark - =====判断设备=====

//如果有新出的机型打开模拟器 截图查看尺寸(就知道新机型的分辨率),填上去就可以了。
#define isIphone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIphone5S ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIphone5C ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIphoneSEtwo ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIphoneSE ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone6S ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone7 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone8 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone6Plus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone6SPlus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone7Plus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone8Plus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhoneX ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhoneXR ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhoneXSMax ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhoneXS ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone11 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone11Pro ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone11ProMax ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone12 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1170, 2532), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone12Pro ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1170, 2532), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone12ProMax ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1284, 2778), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone12Min ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1080, 2340), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone13 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1170, 2532), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone13Pro ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1170, 2532), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone13ProMax ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1284, 2778), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone13Min ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1080, 2340), [[UIScreen mainScreen] currentMode].size) : NO)

#define isIPhone14 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1170, 2532), [[UIScreen mainScreen] currentMode].size) : NO)

#define IC_Pad ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)

//判断是否是ipad
#define isPad              ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)

//判断iPhone5系列
#define iPhone_5           ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)

//判断iPhone6 6s 7系列
#define iPhone_6           ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)

//判断iPhone6p 6sp 7p系列
#define iPhone_6P          ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) && !isPad : NO)

#define isiPhone           (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

//判断 齐刘海系列
#define iPhoneX            kStatusBarHeight>20.0f && isiPhone

/**
 *  系统判断
 */
#define ZL_IOS7  ([EMOCheckTool iPhoneDeviceVersion:7.0])
#define ZL_IOS8  ([EMOCheckTool iPhoneDeviceVersion:8.0])
#define ZL_IOS9  ([EMOCheckTool iPhoneDeviceVersion:9.0])
#define ZL_IOS10 ([EMOCheckTool iPhoneDeviceVersion:10.0])
#define ZL_IOS11 ([EMOCheckTool iPhoneDeviceVersion:11.0])
#define ZL_IOS12 ([EMOCheckTool iPhoneDeviceVersion:12.0])
#define ZL_IOS13 ([EMOCheckTool iPhoneDeviceVersion:13.0])
#define ZL_IOS14 ([EMOCheckTool iPhoneDeviceVersion:14.0])
#define ZL_IOS15 ([EMOCheckTool iPhoneDeviceVersion:15.0])

3、快速配置 imageName

#define IMAGE(_image_)               [UIImage imageNamed:_image_]
//默认占位头像
#define DEFAULT_USER_HEADIMG               [UIImage imageNamed:@"EMO_logo_1"]

4、设置 frame

/**
 *  快速设置 point
 */
#define POINT(_X_,_Y_)               CGPointMake(_X_, _Y_)
/**
 *  快速设置 FRAME
 */
#define FRAME(_X_,_Y_,_W_,_H_)       CGRectMake(_X_, _Y_, _W_, _H_)
/**
 *  快速设置 size
 */
#define SIZE(_W_,_H_)                CGSizeMake(_W_, _H_)
/**
 *  快速设置 bounds
 */
#define BOUNDS(_X_,_Y_,_W_,_H_)      CGRectMake(0, 0, _W_, _H_)
/**
 *  快速设置 range
 */
#define RANGE(_location_,_length_)   NSMakeRange(_location_,_length_)

5、常用尺寸

// 常用尺寸
#define KSCREEN_H                     ([[UIScreen mainScreen] bounds].size.height)
#define KSCREEN_W                     ([[UIScreen mainScreen] bounds].size.width)
#define KSCREEN_SIZE                  ([[UIScreen mainScreen] bounds].size)

6、根据ip6的屏幕来拉伸适配

//根据ip6的屏幕来拉伸
#define Iphone6ScaleWidth KSCREEN_W/375.0
#define Iphone6ScaleHeight KSCREEN_H/667.0

//代码适配宽度和高度间距
#define kScale_Width(value)   Iphone6ScaleWidth* value
#define kScale_Height(value)  Iphone6ScaleHeight * value

7、版本号

//版本号
#define APP_VERSION  [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"]

8、安全区域高度

#define kStatusBarHeight   ([UIApplication sharedApplication].windows.firstObject).windowScene.statusBarManager.statusBarFrame.size.height

//导航栏高
#define kNavHeight         (kStatusBarHeight + 44.0)
//tabBar高
#define kTabBarHeight      ( kStatusBarHeight>20.0? 83.0:49.0 )
//tabBar底边 高
#define kTabBottomHeight   ( kStatusBarHeight>20.0? 34.0:0)

9、UIScrollView内边距调整

#define AdjustsScrollViewInsetNever(controller,view) if(@available(iOS 11.0, *)) {view.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;} else if([controller isKindOfClass:[UIViewController class]]) {controller.automaticallyAdjustsScrollViewInsets = false;}

10、弱引用

#define WeakSelf                       __weak typeof(self) weakSelf = self;
#define StrongSelf                     __strong typeof(self) self = weakSelf;

11、通知

//发送通知
#define POST_NOTIFICATATION(_name_)    [[NSNotificationCenter defaultCenter] postNotificationName:_name_ object:nil];
//移除通知
#define REMOVE_NOTIFICATATION(_name_)  [[NSNotificationCenter defaultCenter] removeObserver:self name:_name_ object:nil];

12、单利对象

//通知中心 (单例对象)
#define NOTIFICATIONCENTER             [NSNotificationCenter defaultCenter]
//user存储
#define USERDEFAULTS                   [NSUserDefaults standardUserDefaults]

13、十六进制颜色

#define RGBS(rgbValue,A)                   ([UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
blue:((float)(rgbValue & 0xFF))/255.0 \
alpha:A])
//使用事例:
//RGBS(0x141414, 0.14)

14、 字符串转URL,int 转字符串

//字符串转URL
#define URL(_url_)                     [NSURL URLWithString:_url_]
//int 转字符串
#define IntToString(integer)           [NSString stringWithFormat:@"%zd",integer]

15、 字符串拼接

//字符串拼接
#define FORMAT(s, ...)                 [NSString stringWithFormat:s, ##__VA_ARGS__]

16、 获取当前根视图

#define RootVC                 [([UIApplication sharedApplication].windows.firstObject) rootViewController]

17、异步线程

#pragma mark ================== 异步线程
#ifndef emo_dispatch_queue_async_safe
#define emo_dispatch_queue_async_safe(queue, block)\
if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(queue)) == 0) {\
block();\
} else {\
dispatch_async(queue, block);\
}
#endif

#ifndef emo_dispatch_main_sync_safe
#define emo_dispatch_main_sync_safe(block) emo_dispatch_queue_async_safe(dispatch_get_main_queue(), block)
#endif

18、字体

/**
 *  快速设置 PingFang(后面的方法需要自定义 UIFont 分类,里面实现对应的方法,否则会报错)
 */
#define PFSCMedium(_SIZE_)        [UIFont fontWithMedium_size:_SIZE_]
#define PFSCRegular(_SIZE_)       [UIFont fontWithRegular_size:_SIZE_]
#define PFSCBold(_SIZE_)          [UIFont fontWithSemibold_size:_SIZE_]
#define PFSCLight(_SIZE_)         [UIFont fontWithLight_size:_SIZE_]

19、主题颜色,全局的颜色设置

//透明颜色
#define KClearColor [UIColor clearColor]
// 背景颜色
#define KBackgroundColor RGBS(0xF5F5F9, 1)
//主题色
#define KMainColor RGBS(0x4DE4B6, 1)
//分割线颜色
#define KLineColor RGBS(0x4f0f0f0, 1) 

20、适配文字大小

//适配后的字体大小(其中,“375” 是以 iPhone 6/7/8 的屏幕宽度为基准,进行适配计算。)
#define AdaptedFontSize(size)     floor((size) * [UIScreen mainScreen].bounds.size.width / 375.0)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,699评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,124评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,127评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,342评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,356评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,057评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,654评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,572评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,205评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,343评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,015评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,704评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,196评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,690评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,348评论 2 358

推荐阅读更多精彩内容