JLChen
2021-05-18 a869383e163a18cdedcf587383c1eca043129754
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
//
//  Copyright © 2017 dahua. All rights reserved.
//
 
#ifndef DHPubDefine_h
#define DHPubDefine_h
 
// 整型索引
typedef NSInteger Index;
 
// 长整型索引
typedef int64_t LongIndex;
 
/// Http类型
typedef NS_ENUM(NSInteger,DHServerPortType)
{
    DHServerPortTypeHttp = 80,       //http 交互方式
    DHServerPortTypeHttps = 443      //https 交互方式
};
 
//Mark::NVR,增加通道
typedef NS_ENUM(NSInteger, DeviceCatalog)
{
    DeviceCatalogCamera,     //摄像头
    DeviceCatalogBox,        //盒子
    DeviceCatalogBoxPart,    //盒子配件
    DeviceCatalogNVR,        //NVR设备
    DeviceCatalogNVRChannel, //NVR设备通道
    DeviceCatalogG1,         //报警网关
    DeviceCatalogG1Part      //报警网关配件
};
 
typedef NS_ENUM(NSInteger, DHChannelListType)
{
    DHChannelListTypeCoverFlow,
    DHChannelListTypeList,
    DHChannelListTypeRecord
} ;
 
typedef NS_ENUM(NSInteger, SDCardStatus)
{
    SDCardStatusException  = 0,//  sd卡异常
    SDCardStatusNormal     = 1,//  sd卡正常
    SDCardStatusNoCard     = 2,//  没有sd卡
    SDCardStatusFormatting = 3,//  正在初始化
    SDCardStatusError      = 4 //  不存在
};
 
//针对公有云消息
typedef NS_ENUM(NSInteger, HlsStatus)
{
    HlsStatusDownloadFail,     //下载失败
    HlsStatusDownloadBegin,  //开始下载
    HlsStatusDownloadEnd,    //下载结束
    HlsStatusSeekSuccess,    //定位成功
    HlsStatusSeekFail,       //定位失败
    HlsStatusAbortDone,      //
    HlsStatusResumeDone,     //
    HlsStatusKeyError = 11,  //密码不匹配
};
 
// 加载状态
typedef NS_ENUM(NSInteger, DHLoadingStatus)
{
    DHLoadingStatusUnknown,     // 未知
    DHLoadingStatusLoading,     // 加载中
    DHLoadingStatusSuccess,     // 加载成功
    DHLoadingStatusFail,     // 加载失败
};
 
#pragma mark- 公用宏
 
#define SCREEN_WIDTH        [[UIScreen mainScreen] bounds].size.width
#define SCREEN_HEIGHT       [[UIScreen mainScreen] bounds].size.height
 
// 屏幕宽度
#define DH_SCREEN_SIZE_WIDTH     MIN([[UIScreen mainScreen]bounds].size.width, [[UIScreen mainScreen]bounds].size.height)
// 屏幕高度
#define DH_SCREEN_SIZE_HEIGHT    MAX([[UIScreen mainScreen]bounds].size.width, [[UIScreen mainScreen]bounds].size.height)
 
// 状态栏高度
#define DH_StatusBarHeight  ([UIApplication  sharedApplication].statusBarFrame.size.height)
 
// 导航栏高度
#define DHL_NavigationBarHeight  44.f
 
// Tabbar高度
#define DH_TabbarHeight    (DH_IS_IPHONEX ? (49.f+34.f) : 49.f)
 
// 导航栏加状态栏高度
#define DH_StatusBarAndNavigationBarHeight  (44.f + [UIApplication  sharedApplication].statusBarFrame.size.height)
 
// 安全区域间隔
#define DH_ViewSafeAreInsets(view) ({UIEdgeInsets insets; if(@available(iOS 11.f, *)) {insets = view.safeAreaInsets;} else {insets = UIEdgeInsetsZero;} insets;})
 
// 底部安全距离
#define DH_BottomSafeMargin (DH_IS_IPHONEX ? 34.f : 0.f)
// 顶部安全距离
#define DH_TopSafeMargin (DH_IS_IPHONEX ? 24.f : 0.f)
// 横屏左右的安全距离
#define DH_LandscapeSafeMargin (DH_IS_IPHONEX ? 44.f : 0.f)
// 横屏左右的视频安全距离
#define DH_LandscapeVideoSafeMargin (DH_IS_IPHONEX ? 64.f : 0.f)
// 导航栏加状态栏高度
#define DH_NavViewHeight (DH_IS_IPHONEX ? 84.f : 64.f)
// 屏幕安全高度
#define DH_ScreenSafeHeight (DH_IS_IPHONEX ? (DH_SCREEN_SIZE_HEIGHT - 58.f) : DH_SCREEN_SIZE_HEIGHT)
 
#define DH_SIZE_SCALE            (1.f / [UIScreen mainScreen].scale)
// 默认动画时间
#define DH_AnimationDuration 0.4f
 
#define DH_LEGAL_PASSWORD_REGEX @"^[A-Za-z0-9!#%,<=>@_~`\\-\\.\\/\\(\\)\\*\\+\\?\\$\\[\\]\\\\\\^\\{\\}\\|]$"
// 对象释放打印
#define DH_LOG_DEALLOCED   {NSLog(@" 💔💔💔 %@ dealloced 💔💔💔", NSStringFromClass(self.class));}
// 图片快捷方式
#define DH_IMAGENAMED(imageName)  [UIImage imageNamed:imageName]
 
// 主窗口
#define DH_KEY_WINDOW ([UIApplication sharedApplication].delegate).window
 
#define DH_IOS_VERSION ([[[UIDevice currentDevice] systemVersion] floatValue]) //iOS版本号
 
#define DH_CLIENT_OS_VERSION ([NSString stringWithFormat:@"iOS%@", [[UIDevice currentDevice] systemVersion]]) //iOS系统版本号
 
#define DH_iOS11_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 11.0)
#define DH_iOS10_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0)
 
 
// 判断是否为iPhone 5/5s
#define DH_IS_IPHONE5 (DH_SCREEN_SIZE_WIDTH == 320.0f && DH_SCREEN_SIZE_HEIGHT == 568.0f)
 
// 判断是否为iPhone 6/6s/7/8
#define DH_IS_IPHONE6_6s (DH_SCREEN_SIZE_WIDTH == 375.0f && DH_SCREEN_SIZE_HEIGHT == 667.0f)
 
// 判断是否为iPhone X
#define DH_IS_IPHONEX ((DH_SCREEN_SIZE_WIDTH == 375.0f && DH_SCREEN_SIZE_HEIGHT == 812.0f) || ((DH_SCREEN_SIZE_WIDTH == 414 && DH_SCREEN_SIZE_HEIGHT == 896)))
 
// 判断是否为iPhone 6Plus/6sPlus/7Plus/8Plus
#define DH_IS_IPHONE6Plus_6sPlus (DH_SCREEN_SIZE_WIDTH == 414.0f && DH_SCREEN_SIZE_HEIGHT == 736.0f)
 
#pragma mark - Convinience RETURN Macro
#define DH_RETURN_IF_TRUE(checkVal) {if(checkVal) \
{NSLog(@"🍎🍎🍎####:%s,Check value true,return...", __FUNCTION__);return;}}   //判断为真返回
 
#define DH_RETURN_IF_FALSE(checkVal) {if(!(checkVal)) \
{ NSLog(@"🍎🍎🍎####:%s,Check value false,return...", __FUNCTION__); return;}} //判断为假返回
 
#define DH_RETURN_NIL_IF_TRUE(checkVal) {if(checkVal) \
{NSLog(@" 🍎🍎🍎####:%s,Check value true,return...", __FUNCTION__);return nil;}}   //判断为真返回空值
 
#define DH_RETURN_NIL_IF_FALSE(checkVal) {if(!(checkVal)) \
{ NSLog(@" 🍎🍎🍎####:%s,Check value false,return...", __FUNCTION__); return nil;}} //判断为假返回空值
 
#define kAutoHideBarTime    (4.0f)  //悬浮条自动隐藏时间
 
#define kPictureHideBarTime    (5.0f)  //抓图录制图片自动隐藏时间
 
#pragma mark - 日期格式
//日期格式
#define kFormatTimeLocal        (@"yyyyMMdd'T'HHmmss")
 
#define DEVICE_NAME_MAX_LIMIT     32
#define CHANNEL_NAME_MAX_LIMIT    32
 
#pragma mark - Text
 
//密码允许的字符(由于3.0.5版本引入安全基线需求,需要兼容旧的密码规则)
#define DH_LEGAL_PASSWORD_OLD   @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890~`!@#$%^&*()-_+={[]}|\\:;'\"<,>.?/ "
#define DH_LEGAL_PASSWORD       @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!#$%()*+,-./<=>?@[\\]^_`{|}~"
#define DH_LEGAL_ACCOUNT        @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890@_-."
#define DH_LEGAL_ACCOUNT_WITHOUT_LIMIT       @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!#$%()*+,-./<=>?@[\\]^_`{|}~&'"
#define DH_LEGAL_NUMBER         @"1234567890"
#define DH_LEGAL_NUMBERnABC     @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
 
#define DH_PASSWORD_MIN_LENGTH      8   //密码最小长度
#define DH_PASSWORD_MAX_LENGTH      32  //密码最大长度
#define DH_USERNAME_MAX_LENGTH      11  //登录名最大长度
 
#define DH_LOG_FUN    NSLog(@"FUNCTION____%s____line%d____",__FUNCTION__,__LINE__);
 
// 定义单例
#pragma mark Singleton
 
#define SYNTHESIZE_SINGLETON_FOR_CLASS_HEADER(__CLASSNAME__)    \
\
+ (__CLASSNAME__*) sharedInstance;    \
 
#define SYNTHESIZE_SINGLETON_FOR_CLASS(__CLASSNAME__) \
\
+ (__CLASSNAME__ *)sharedInstance { \
static __CLASSNAME__ *shared##__CLASSNAME__ = nil; \
static dispatch_once_t onceToken; \
dispatch_once(&onceToken, ^{ \
shared##__CLASSNAME__ = [[self alloc] init]; \
}); \
return shared##__CLASSNAME__; \
}
 
///MARK: Fix Category Bug
#define TT_FIX_CATEGORY_BUG(name) @interface TT_FIX_CATEGORY_BUG_##name:NSObject @end \
@implementation TT_FIX_CATEGORY_BUG_##name @end
 
#endif /* DHPubDefine_h */