#ifndef __IPHONE_5_0 #warning "This project uses features only available in iOS SDK 5.0 and later." #endif #ifdef __OBJC__ #import <UIKit/UIKit.h> #import <Foundation/Foundation.h> // 1.日志开关 #ifdef DEBUG #define CXLog(...) NSLog(__VA_ARGS__) #else #define CXLog(...) #endif // 2.判断是否为iOS7 #define iOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) // 3.获得颜色 #define CXColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1] // 4.加载JSON对象 #define CXJson(name) [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@#name withExtension:nil]] options:NSJSONReadingAllowFragments error:nil] // 5.全局背景色 #define CXGlobalBg [UIColor colorWithPatternImage:[UIImage imageNamed:@"bg"]]
// 6.判断是否为4inch #define is4inch ([UIScreen mainScreen].bounds.size.height == 568.0) #endif #define EMOTION_CACHE_PATH @"cachedemotions" #define EMOTION_RECENT_USED @"recentusedemotions" #define EMOTION_CATEGORIES @"categoryemotions" #define EMOTION_TOPICS @"emotiontopics" // 收藏相关 #define COLLECT_CACHE_PATH @"collected" // 配图相关 #define WATERFALL_ITEM_HEIGHT_MAX 300 #define WATERFALL_ITEM_WIDTH 146
1、release时,屏蔽log #if defined (DEBUG) && DEBUG == 1 #else #define NSLog(...) {}; #endif 2、在主线程或在后台执行block #define BACK(block) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block) #define MAIN(block) dispatch_async(dispatch_get_main_queue(),block) 3、设备相关 #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO) #define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO) #define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define CurrentSystemVersion ([[UIDevice currentDevice] systemVersion]) #define CurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0]) 4、区分模拟器和真机 #if TARGET_OS_IPHONE
//iPhone Device #endif #if TARGET_IPHONE_SIMULATOR
//iPhone Simulator #endif 5、根据是否使用ARC做不同操作 #if __has_feature(objc_arc) //compiling with ARC #else // compiling without ARC #endif
#pragma mark - Frame (宏 x, y, width, height) // Screen Scale #define MainScreenScale [[UIScreen mainScreen] scale] // App Frame #define Application_Frame [[UIScreen mainScreen] applicationFrame] // App Frame Height&Width #define App_Frame_Height [[UIScreen mainScreen] applicationFrame].size.height #define App_Frame_Width [[UIScreen mainScreen] applicationFrame].size.width // MainScreen Height&Width #define Main_Screen_Height [[UIScreen mainScreen] bounds].size.height #define Main_Screen_Width [[UIScreen mainScreen] bounds].size.width // View 坐标(x,y)和宽高(width,height) #define X(v) (v).frame.origin.x #define Y(v) (v).frame.origin.y #define WIDTH(v) (v).frame.size.width #define HEIGHT(v) (v).frame.size.height #define MinX(v) CGRectGetMinX((v).frame) #define MinY(v) CGRectGetMinY((v).frame) #define MidX(v) CGRectGetMidX((v).frame) #define MidY(v) CGRectGetMidY((v).frame) #define MaxX(v) CGRectGetMaxX((v).frame) #define MaxY(v) CGRectGetMaxY((v).frame) // 系统控件默认高度 #define kStatusBarHeight (20.f) #define kTopBarHeight (44.f) #define kBottomBarHeight (49.f) #define kCellDefaultHeight (44.f) #define kEnglishKeyboardHeight (216.f) #define kChineseKeyboardHeight (252.f)
#pragma mark - Funtion Method (宏 方法) // PNG JPG 图片路径 #define PNGPATH(NAME) [[NSBundle mainBundle] pathForResource:[NSString stringWithUTF8String:NAME] ofType:@"png"] #define JPGPATH(NAME) [[NSBundle mainBundle] pathForResource:[NSString stringWithUTF8String:NAME] ofType:@"jpg"] #define PATH(NAME, EXT) [[NSBundle mainBundle] pathForResource:(NAME) ofType:(EXT)] // 加载图片 #define PNGIMAGE(NAME) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:(NAME) ofType:@"png"]] #define JPGIMAGE(NAME) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:(NAME) ofType:@"jpg"]] #define IMAGE(NAME, EXT) [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:(NAME) ofType:(EXT)]] #define IMAGENAMED(NAME) [UIImage imageNamed:NAME] // 字体大小(常规/粗体) #define BOLDSYSTEMFONT(FONTSIZE)[UIFont boldSystemFontOfSize:FONTSIZE] #define SYSTEMFONT(FONTSIZE) [UIFont systemFontOfSize:FONTSIZE] #define FONT(NAME, FONTSIZE) [UIFont fontWithName:(NAME) size:(FONTSIZE)] // 颜色(RGB) #define RGBCOLOR(r, g, b) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1] #define RGBACOLOR(r, g, b, a) [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)] // 当前版本 #define FSystemVersion ([[[UIDevice currentDevice] systemVersion] floatValue]) #define DSystemVersion ([[[UIDevice currentDevice] systemVersion] doubleValue]) #define SSystemVersion ([[UIDevice currentDevice] systemVersion]) // 当前语言 #define CURRENTLANGUAGE ([[NSLocale preferredLanguages] objectAtIndex:0]) // 是否Retina屏 #define isRetina ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO) // 是否iPhone5 #define isiPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO) // 是否iPad #define isPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) // UIView - viewWithTag #define VIEWWITHTAG(_OBJECT, _TAG) [_OBJECT viewWithTag : _TAG] // 本地化字符串 /** NSLocalizedString宏做的其实就是在当前bundle中查找资源文件名“Localizable.strings”(参数:键+注释) */ #define LocalString(x, ...) NSLocalizedString(x, nil) /** NSLocalizedStringFromTable宏做的其实就是在当前bundle中查找资源文件名“xxx.strings”(参数:键+文件名+注释) */ #define AppLocalString(x, ...) NSLocalizedStringFromTable(x, @"zjj", nil) // App Name #define AppDisplayName [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleDisplayName"] // RGB颜色转换(16进制->10进制) #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] #if TARGET_OS_IPHONE /** iPhone Device */ #endif #if TARGET_IPHONE_SIMULATOR /** iPhone Simulator */ #endif // ARC #if __has_feature(objc_arc) /** Compiling with ARC */ #else /** Compiling without ARC */ #endif /* ****************************************************************************************************************** */ #pragma mark - Log Method (宏 LOG) // 日志 / 断点 // ============================================================================================================================= // DEBUG模式 #define ITTDEBUG // LOG等级 #define ITTLOGLEVEL_INFO 10 #define ITTLOGLEVEL_WARNING 3 #define ITTLOGLEVEL_ERROR 1 // ============================================================================================================================= // LOG最高等级 #ifndef ITTMAXLOGLEVEL #ifdef DEBUG #define ITTMAXLOGLEVEL ITTLOGLEVEL_INFO #else #define ITTMAXLOGLEVEL ITTLOGLEVEL_ERROR #endif #endif // ============================================================================================================================= // LOG PRINT // The general purpose logger. This ignores logging levels. #ifdef ITTDEBUG #define ITTDPRINT(xx, ...) NSLog(@"< %s:(%d) > : " xx , __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) #else #define ITTDPRINT(xx, ...) ((void)0) #endif // Prints the current method's name. #define ITTDPRINTMETHODNAME() ITTDPRINT(@"%s", __PRETTY_FUNCTION__) // Log-level based logging macros. #if ITTLOGLEVEL_ERROR <= ITTMAXLOGLEVEL #define ITTDERROR(xx, ...) ITTDPRINT(xx, ##__VA_ARGS__) #else #define ITTDERROR(xx, ...) ((void)0) #endif #if ITTLOGLEVEL_WARNING <= ITTMAXLOGLEVEL #define ITTDWARNING(xx, ...) ITTDPRINT(xx, ##__VA_ARGS__) #else #define ITTDWARNING(xx, ...) ((void)0) #endif #if ITTLOGLEVEL_INFO <= ITTMAXLOGLEVEL #define ITTDINFO(xx, ...) ITTDPRINT(xx, ##__VA_ARGS__) #else #define ITTDINFO(xx, ...) ((void)0) #endif // 条件LOG #ifdef ITTDEBUG #define ITTDCONDITIONLOG(condition, xx, ...) { if ((condition)) { ITTDPRINT(xx, ##__VA_ARGS__); } } #else #define ITTDCONDITIONLOG(condition, xx, ...) ((void)0) #endif // 断点Assert #define ITTAssert(condition, ...) do { if (!(condition)) { [[NSAssertionHandler currentHandler] handleFailureInFunction:[NSString stringWithFormat:@"< %s >", __PRETTY_FUNCTION__] file:[[NSString stringWithUTF8String:__FILE__] lastPathComponent] lineNumber:__LINE__ description:__VA_ARGS__]; } } while(0) /* ****************************************************************************************************************** */ #pragma mark - Constants (宏 常量) /** 时间间隔 */ #define kHUDDuration (1.f) /** 一天的秒数 */ #define SecondsOfDay (24.f * 60.f * 60.f) /** 秒数 */ #define Seconds(Days) (24.f * 60.f * 60.f * (Days)) /** 一天的毫秒数 */ #define MillisecondsOfDay (24.f * 60.f * 60.f * 1000.f) /** 毫秒数 */ #define Milliseconds(Days) (24.f * 60.f * 60.f * 1000.f * (Days)) #endif
宏
符合ANSI的预定义宏:
__DATE__:表示当前源文件编译时的日期,格式为:月/天/年(Mmm dd yyyy)。
__FILE__:表示当前正在处理的源文件名称。
__LINE__:表示当前正在处理的源文件的行,可以用#line指令修改。
__STDC__:表示是ANSI C标准。只有在编译器选项指定了/Za,并且不是编译C++程序时,被定义为常整数1;否则未定义。
__TIME__:表示当前源文件的最近编译时的时间,格式为:小时/分/秒(hh:mm:ss)。
__TIMESTAMP__:表示当前源文件的最近修改日期和时间,格式为:Ddd Mmm dd hh:mm:ss yyyy,其中Ddd是星期的缩写。