/**獲取屏幕寬度與高度 導航,tabbar高度*/
#define SCREEN_WIDTH? ?[UIScreen mainScreen].bounds.size.width
#define SCREEN_HEIGHT ?[UIScreen mainScreen].bounds.size.height
#define NavBarHeight? ? ? ? ? ? ? ? ? ? ? ? self.navigationController.navigationBar.bounds.size.height
#define TabBarHeight? ? ? ? ? ? ? ? ? ? ? ? self.tabBarController.tabBar.bounds.size.height
#define ViewWidth(v)? ? ? ? ? ? ? ? ? ? ? ? v.frame.size.width
#define ViewHeight(v)? ? ? ? ? ? ? ? ? ? ? v.frame.size.height
#define ViewX(v)? ? ? ? ? ? ? ? ? ? ? ? ? ? v.frame.origin.x
#define ViewY(v)? ? ? ? ? ? ? ? ? ? ? ? ? ? v.frame.origin.y
/**獲取通知中心*/
#define?ZSNotificationCenter ?[NSNotificationCenter defaultCenter]
/**顏色*/
#define ZSRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]//隨機色
#define ZSRGBColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]//rgb
#define ZSGBAColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:a]//rgba
#define ZSlearColor [UIColor clearColor]//透明色
#define zsColorNavBG [UIColor colorWithHexString:@"0xF8F8F8"]
#define zsColorNavTitle [UIColor colorWithHexString:@"0x323A45"]
#define zsColorTableBG [UIColor colorWithHexString:@"0xFFFFFF"]
#define zsColorTableSectionBg [UIColor colorWithHexString:@"0xF2F4F6"]
#define zsColor222 [UIColor colorWithHexString:@"0x222222"]
#define zsColor666 [UIColor colorWithHexString:@"0x666666"]
#define zsColor999 [UIColor colorWithHexString:@"0x999999"]
#define zsColorDDD [UIColor colorWithHexString:@"0xDDDDDD"]
#define zsColorCCC [UIColor colorWithHexString:@"0xCCCCCC"]
#define zsColorBrandGreen [UIColor colorWithHexString:@"0x3BBD79"]
#define zsColorBrandRed [UIColor colorWithHexString:@"0xFF5846"]
#define YAXMainColor [UIColor colorWithHexString:@"0x29B2BB"] //主題色
//#define YAXMainColor ZSRGBColor(225, 53, 58) //主題色
#define YAXBacColor ZSRGBColor(240, 240, 240) //背景灰色
#define YAXGreen ZSRGBColor(105,176,45)//綠色
#define width(a) (SCREEN_WIDTH/375)*a
#define height(a) (SCREEN_HEIGHT/667)*a
#define YAXButton_HEIGHT 44
#define YAXMAIGN 15
#define YAXHMAIGN width(20)
#define YAXSMAIGN height(20)
#define YAXLMAGIN 10
#define YAXPaddingLeftW width(15)
#define ZSStrFormat(a,b) [NSString stringWithFormat:@"%@%@",a,b]
#define FONT(F) [UIFont systemFontOfSize:F]
#define? zsBackButtonFontSize FONT(16) //字體
#define? zsNavTitleFontSize FONT(18)
#define? zsTitieFontSize FONT(14)
#define? zsTipFont FONT(15)
//圓角view
#define CORNERRADIUS(view,radiu) \
view.layer.cornerRadius = radiu;\
view.layer.masksToBounds = YES;\
//默認圖片
#define IMAGE_PLACEHOLDER [UIImage imageNamed:@"loadImage"]
#define NavMAXY CGRectGetMaxY(self.navigationController.navigationBar.frame)
#define TabBarY self.tabBarController.tabBar.y
/**Log*/
#ifdef DEBUG
#define DLog(fmt, ...) NSLog((@"[文件名:%s]\n" "[函數名:%s]\n" "[行號:%d] \n" fmt), __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__);
#define DeBugLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#define NSLog(...) NSLog(__VA_ARGS__);
#define MyNSLog(FORMAT, ...) fprintf(stderr,"[%s]:[line %d行] %s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
#define DLog(...)
#define DeBugLog(...)
#define NSLog(...)
#define MyNSLog(FORMAT, ...)
#endif
/**強弱引用? ? http://cc.cocimg.com/api/uploads/20160712/1468319802739618.png*/
#define ZSWeakSelf(type)? __weak typeof(type) weak##type = type;? //弱
#define ZSStrongSelf(type)? __strong typeof(type) type = weak##type;? //強
/**view邊框*/
#define ZSViewBorderRadius(View, Radius, Width, Color)\
\
[View.layer setCornerRadius:(Radius)];\
[View.layer setMasksToBounds:YES];\
[View.layer setBorderWidth:(Width)];\
[View.layer setBorderColor:[Color CGColor]]
/**alertView*/
#define zsTipAlert(_S_, ...)? ? [[[UIAlertView alloc] initWithTitle:@"提示" message:[NSString stringWithFormat:(_S_), ##__VA_ARGS__] delegate:nil cancelButtonTitle:@"知道了" otherButtonTitles:nil] show]
/**判斷當前的iPhone設備/系統版本*/
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)//判斷是否為iPhone
#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)//判斷是否為iPad
#define IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"]) //判斷是否為ipod
#define iPhone5SE [[UIScreen mainScreen] bounds].size.width == 320.0f && [[UIScreen mainScreen] bounds].size.height == 568.0f// 判斷是否為 iPhone 5SE
#define iPhone6_6s_7 [[UIScreen mainScreen] bounds].size.width == 375.0f && [[UIScreen mainScreen] bounds].size.height == 667.0f// 判斷是否為iPhone 6/6s/7
#define iPhone6Plus_6sPlus_7Plus [[UIScreen mainScreen] bounds].size.width == 414.0f && [[UIScreen mainScreen] bounds].size.height == 736.0f// 判斷是否為iPhone 6Plus/6sPlus/7Plus
#define IOS_SYSTEM_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]//獲取系統版本
#define IOS_VERSION_8_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0)? (YES):(NO))//判斷 iOS 8 或更高的系統版本
#define kDevice_Is_iPhone4 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 960), [[UIScreen mainScreen] currentMode].size) : NO)
#define kDevice_Is_iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
#define kDevice_Is_iPhone6 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)
#define kDevice_Is_iPhone6Plus ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(1242, 2208), [[UIScreen mainScreen] currentMode].size) : NO)
#define kScaleFrom_iPhone5_Desgin(_X_) (_X_ * (SCREEN_WIDTH/320))
/**判斷真機還是模擬器*/
#if TARGET_OS_IPHONE//iPhone Device
#endif
#if TARGET_IPHONE_SIMULATOR//iPhone Simulator
#endif
//? ? 主要單例
#define UserDefaults? ? ? ? ? ? ? ? ? ? ? ? [NSUserDefaults standardUserDefaults]
#define NotificationCenter? ? ? ? ? ? ? ? ? [NSNotificationCenter defaultCenter]
#define SharedApplication? ? ? ? ? ? ? ? ? [UIApplication sharedApplication]
#define Bundle? ? ? ? ? ? ? ? ? ? ? ? ? ? ? [NSBundle mainBundle]
#define MainScreen? ? ? ? ? ? ? ? ? ? ? ? ? [UIScreen mainScreen]
/**沙盒目錄文件*/
#define PathTemp NSTemporaryDirectory()//獲取temp
#define PathDocument [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]//獲取沙盒 Document
#define PathCache [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]//獲取沙盒 Cache
/**GCD 的宏定義*/
#define ZSDISPATCH_ONCE_BLOCK(onceBlock) static dispatch_once_t onceToken; dispatch_once(&onceToken, onceBlock);//GCD - 一次性執行
#define ZSDISPATCH_MAIN_THREAD(mainQueueBlock) dispatch_async(dispatch_get_main_queue(), mainQueueBlock);//GCD - 在Main線程上運行
#define ZSDISPATCH_GLOBAL_QUEUE_DEFAULT(globalQueueBlock) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), globalQueueBlock);//GCD - 開啟異步線程
//class轉string
#define StringClass(Class) NSStringFromClass([Class class])
//防止空值賦值
#define NotNullStr(obj,nullObj) obj ? \
([obj isKindOfClass:[NSString class]] ? obj : \
([obj isKindOfClass:[NSNumber class]] ? [(NSNumber *)obj stringValue] : nullObj)) : \
nullObj