TXCustomModel.h 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436
  1. //
  2. // TXCustomModel.h
  3. // ATAuthSDK
  4. //
  5. // Created by yangli on 2019/4/4.
  6. // Copyright © 2019. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import <UIKit/UIKit.h>
  10. NS_ASSUME_NONNULL_BEGIN
  11. typedef NS_ENUM(NSUInteger, PNSPresentationDirection){
  12. PNSPresentationDirectionBottom = 0,
  13. PNSPresentationDirectionRight,
  14. PNSPresentationDirectionTop,
  15. PNSPresentationDirectionLeft,
  16. };
  17. /**
  18. * 构建控件的frame,view布局时会调用该block得到控件的frame
  19. * @param screenSize 屏幕的size,可以通过该size来判断是横屏还是竖屏
  20. * @param superViewSize 该控件的super view的size,可以通过该size,辅助该控件重新布局
  21. * @param frame 控件默认的位置
  22. * @return 控件新设置的位置
  23. */
  24. typedef CGRect(^PNSBuildFrameBlock)(CGSize screenSize, CGSize superViewSize, CGRect frame);
  25. @interface TXCustomModel : NSObject
  26. /**
  27. * 说明,可设置的Y轴距离,waring: 以下所有关于Y轴的设置<=0都将不生效,请注意
  28. * 全屏模式:默认是以375x667pt为基准,其他屏幕尺寸可以根据(ratio = 屏幕高度/667)比率来适配,比如 Y*ratio
  29. */
  30. #pragma mark- 全屏、弹窗模式设置
  31. /**
  32. * 授权页面中,渲染并显示所有控件的view,称content view,不实现该block默认为全屏模式
  33. * 实现弹窗的方案 x >= 0 || y >= 0 width <= 屏幕宽度 || height <= 屏幕高度
  34. */
  35. @property (nonatomic, copy) PNSBuildFrameBlock contentViewFrameBlock;
  36. #pragma mark- 竖屏、横屏模式设置
  37. /** 屏幕是否支持旋转方向,默认UIInterfaceOrientationMaskPortrait,注意:在刘海屏,UIInterfaceOrientationMaskPortraitUpsideDown属性慎用! */
  38. @property (nonatomic, assign) UIInterfaceOrientationMask supportedInterfaceOrientations;
  39. #pragma mark- 仅弹窗模式属性
  40. /** 底部蒙层背景颜色,默认黑色 */
  41. @property (nonatomic, strong) UIColor *alertBlurViewColor;
  42. /** 底部蒙层背景透明度,默认0.5 */
  43. @property (nonatomic, assign) CGFloat alertBlurViewAlpha;
  44. /** contentView背景颜色,默认白色 */
  45. @property (nonatomic, strong) UIColor *alertContentViewColor;
  46. /** contentView背景透明度,默认1.0 ,即不透明*/
  47. @property (nonatomic, assign) CGFloat alertContentViewAlpha;
  48. /** contentView的四个圆角值,顺序为左上,左下,右下,右上,需要填充4个值,不足4个值则无效,如果值<=0则为直角 */
  49. @property (nonatomic, copy) NSArray<NSNumber *> *alertCornerRadiusArray;
  50. /** 标题栏背景颜色 */
  51. @property (nonatomic, strong) UIColor *alertTitleBarColor;
  52. /** 标题栏是否隐藏,默认NO */
  53. @property (nonatomic, assign) BOOL alertBarIsHidden;
  54. /** 标题栏标题,内容、字体、大小、颜色 */
  55. @property (nonatomic, copy) NSAttributedString *alertTitle;
  56. /** 标题栏右侧关闭按钮图片设置*/
  57. @property (nonatomic, strong) UIImage *alertCloseImage;
  58. /** 标题栏右侧关闭按钮是否显示,默认NO*/
  59. @property (nonatomic, assign) BOOL alertCloseItemIsHidden;
  60. /** 构建标题栏的frame,view布局或布局发生变化时调用,不实现则按默认处理,实现时仅有height生效 */
  61. @property (nonatomic, copy) PNSBuildFrameBlock alertTitleBarFrameBlock;
  62. /** 构建标题栏标题的frame,view布局或布局发生变化时调用,不实现则按默认处理 */
  63. @property (nonatomic, copy) PNSBuildFrameBlock alertTitleFrameBlock;
  64. /** 构建标题栏右侧关闭按钮的frame,view布局或布局发生变化时调用,不实现则按默认处理 */
  65. @property (nonatomic, copy) PNSBuildFrameBlock alertCloseItemFrameBlock;
  66. #pragma mark- 导航栏(只对全屏模式有效)
  67. /**授权页显示中,导航栏是否隐藏,默认NO*/
  68. @property (nonatomic, assign) BOOL navIsHidden;
  69. /**授权页push到其他页面后,导航栏是否隐藏,默认NO*/
  70. @property (nonatomic, assign) BOOL navIsHiddenAfterLoginVCDisappear;
  71. /**是否需要中断返回,如果设置为YES,则点击左上角返回按钮的时候默认页面不消失,同时透出状态码700010,需要自己调用TXCommonHandler cancelLoginVCAnimated方法隐藏页面,默认为NO*/
  72. @property (nonatomic, assign) BOOL suspendDisMissVC;
  73. /** 导航栏主题色 */
  74. @property (nonatomic, strong) UIColor *navColor;
  75. /** 导航栏标题,内容、字体、大小、颜色 */
  76. @property (nonatomic, copy) NSAttributedString *navTitle;
  77. /** 导航栏返回图片 */
  78. @property (nonatomic, strong) UIImage *navBackImage;
  79. /** 是否隐藏授权页导航栏返回按钮,默认不隐藏 */
  80. @property (nonatomic, assign) BOOL hideNavBackItem;
  81. /** 导航栏右侧自定义控件,可以在创建该VIEW的时候添加手势操作,或者创建按钮或其他赋值给VIEW */
  82. @property (nonatomic, strong) UIView *navMoreView;
  83. /** 构建导航栏返回按钮的frame,view布局或布局发生变化时调用,不实现则按默认处理 */
  84. @property (nonatomic, copy) PNSBuildFrameBlock navBackButtonFrameBlock;
  85. /** 构建导航栏标题的frame,view布局或布局发生变化时调用,不实现则按默认处理 */
  86. @property (nonatomic, copy) PNSBuildFrameBlock navTitleFrameBlock;
  87. /** 构建导航栏右侧more view的frame,view布局或布局发生变化时调用,不实现则按默认处理,边界 CGRectGetMinX(frame) >= (superViewSizeViewSize / 0.3) && CGRectGetWidth(frame) <= (superViewSize.width / 3.0) */
  88. @property (nonatomic, copy) PNSBuildFrameBlock navMoreViewFrameBlock;
  89. #pragma mark- 全屏、弹窗模式共同属性
  90. #pragma mark- 授权页动画相关
  91. /** 授权页弹出方向,默认PNSPresentationDirectionBottom,该属性只对自带动画起效,不影响自定义动画 */
  92. @property (nonatomic, assign) PNSPresentationDirection presentDirection;
  93. /** 授权页显示和消失动画时间,默认为0.25s,<= 0 时关闭动画,该属性只对自带动画起效,不影响自定义动画 **/
  94. @property (nonatomic, assign) CGFloat animationDuration;
  95. /** 授权页显示动画(弹窗 & 全屏),不设置或设置为nil默认使用自带动画,SDK内部会主动更改动画的一些属性(包括:removedOnCompletion = NO、fillMode = kCAFillModeForwards 及 delegate) **/
  96. @property (nonatomic, strong, nullable) CAAnimation *entryAnimation;
  97. /** 授权页消失动画(弹窗 & 全屏),不设置或设置为nil默认使用自带动画,SDK内部会主动更改动画的一些属性(包括:removedOnCompletion = NO、fillMode = kCAFillModeForwards 及 delegate) **/
  98. @property (nonatomic, strong, nullable) CAAnimation *exitAnimation;
  99. /** 授权页显示时的背景动画(仅弹窗),不设置或设置为nil默认使用自带动画,SDK内部会主动更改动画的一些属性(包括:removedOnCompletion = NO、fillMode = kCAFillModeForwards 及 delegate) **/
  100. @property (nonatomic, strong, nullable) CAAnimation *bgEntryAnimation;
  101. /** 授权页消失时的背景动画(仅弹窗),不设置或设置为nil默认使用自带动画,SDK内部会主动更改动画的一些属性(包括:removedOnCompletion = NO、fillMode = kCAFillModeForwards 及 delegate) **/
  102. @property (nonatomic, strong, nullable) CAAnimation *bgExitAnimation;
  103. #pragma mark- 状态栏
  104. /** 状态栏是否隐藏,默认NO */
  105. @property (nonatomic, assign) BOOL prefersStatusBarHidden;
  106. /** 状态栏主题风格,默认UIStatusBarStyleDefault */
  107. @property (nonatomic, assign) UIStatusBarStyle preferredStatusBarStyle;
  108. #pragma mark- 背景
  109. /** 授权页背景色 */
  110. @property (nonatomic, strong) UIColor *backgroundColor;
  111. /** 授权页背景图片 */
  112. @property (nonatomic, strong) UIImage *backgroundImage;
  113. /** 授权页背景图片view的 content mode,默认为 UIViewContentModeScaleAspectFill */
  114. @property (nonatomic, assign) UIViewContentMode backgroundImageContentMode;
  115. /** 点击授权页背景是否关闭授权页,只有在弹窗模式下生效,默认NO*/
  116. @property (nonatomic, assign) BOOL tapAuthPageMaskClosePage;
  117. #pragma mark- logo图片
  118. /** logo图片设置 */
  119. @property (nonatomic, strong) UIImage *logoImage;
  120. /** logo是否隐藏,默认NO */
  121. @property (nonatomic, assign) BOOL logoIsHidden;
  122. /** 构建logo的frame,view布局或布局发生变化时调用,不实现则按默认处理 */
  123. @property (nonatomic, copy) PNSBuildFrameBlock logoFrameBlock;
  124. /** logo的宽设置 */
  125. @property (nonatomic, assign) CGFloat logoWidth DEPRECATED_MSG_ATTRIBUTE("Please use logoFrameBlock instead");
  126. /** logo的高设置 */
  127. @property (nonatomic, assign) CGFloat logoHeight DEPRECATED_MSG_ATTRIBUTE("Please use logoFrameBlock instead");
  128. /** logo相对导航栏底部或标题栏底部的Y轴距离 */
  129. @property (nonatomic, assign) CGFloat logoTopOffetY DEPRECATED_MSG_ATTRIBUTE("Please use logoFrameBlock instead");
  130. #pragma mark- slogan
  131. /** slogan文案,内容、字体、大小、颜色 */
  132. @property (nonatomic, copy) NSAttributedString *sloganText;
  133. /** slogan是否隐藏,默认NO */
  134. @property (nonatomic, assign) BOOL sloganIsHidden;
  135. /** 构建slogan的frame,view布局或布局发生变化时调用,不实现则按默认处理 */
  136. @property (nonatomic, copy) PNSBuildFrameBlock sloganFrameBlock;
  137. /** slogan相对导航栏底部或标题栏底部的Y轴距离 */
  138. @property (nonatomic, assign) CGFloat sloganTopOffetY DEPRECATED_MSG_ATTRIBUTE("Please use sloganFrameBlock instead");
  139. #pragma mark- 号码
  140. /** 号码颜色设置 */
  141. @property (nonatomic, strong) UIColor *numberColor;
  142. /** 号码字体设置,大小小于16则不生效 */
  143. @property (nonatomic, strong) UIFont *numberFont;
  144. /**
  145. * 构建号码的frame,view布局或布局发生变化时调用,只有x、y生效,不实现则按默认处理,
  146. * 注:设置不能超出父视图 content view
  147. */
  148. @property (nonatomic, copy) PNSBuildFrameBlock numberFrameBlock;
  149. /**
  150. * 号码相对导航栏底部或标题栏底部的Y轴距离,不设置则按默认处理
  151. * 注:设置超出父视图 content view 时不生效
  152. */
  153. @property (nonatomic, assign) CGFloat numberTopOffetY DEPRECATED_MSG_ATTRIBUTE("Please use numberFrameBlock instead");
  154. /**
  155. * 号码相对屏幕中线的X轴偏移距离,不设置则按默认处理,默认为0水平居中
  156. * 注:设置不能超出父视图 content view
  157. */
  158. @property (nonatomic, assign) CGFloat numberOffetX DEPRECATED_MSG_ATTRIBUTE("Please use numberFrameBlock instead");
  159. #pragma mark- 登录
  160. /** 登陆按钮文案,内容、字体、大小、颜色*/
  161. @property (nonatomic, strong) NSAttributedString *loginBtnText;
  162. /** 登录按钮背景图片组,默认高度50.0pt,@[激活状态的图片,失效状态的图片,高亮状态的图片] */
  163. @property (nonatomic, strong) NSArray<UIImage *> *loginBtnBgImgs;
  164. /**
  165. * 是否自动隐藏点击登录按钮之后授权页上转圈的 loading, 默认为YES,在获取登录Token成功后自动隐藏
  166. * 如果设置为 NO,需要自己手动调用 [[TXCommonHandler sharedInstance] hideLoginLoading] 隐藏
  167. */
  168. @property (nonatomic, assign) BOOL autoHideLoginLoading;
  169. /**
  170. * 构建登录按钮的frame,view布局或布局发生变化时调用,不实现则按默认处理
  171. * 注:不能超出父视图 content view,height不能小于20,width不能小于父视图宽度的一半
  172. */
  173. @property (nonatomic, copy) PNSBuildFrameBlock loginBtnFrameBlock;
  174. /**
  175. * 登录按钮相对导航栏底部或标题栏底部的Y轴距离,不设置则按默认处理
  176. * 注:设置超出父视图 content view 时不生效
  177. */
  178. @property (nonatomic, assign) CGFloat loginBtnTopOffetY DEPRECATED_MSG_ATTRIBUTE("Please use loginBtnFrameBlock instead");
  179. /** 登录按钮高度,小于20.0pt不生效,不设置则按默认处理 */
  180. @property (nonatomic, assign) CGFloat loginBtnHeight DEPRECATED_MSG_ATTRIBUTE("Please use loginBtnFrameBlock instead");
  181. /** 登录按钮相对content view的左右边距,按钮宽度必须大于等于屏幕的一半,不设置则按默认处理 */
  182. @property (nonatomic, assign) CGFloat loginBtnLRPadding DEPRECATED_MSG_ATTRIBUTE("Please use loginBtnFrameBlock instead");
  183. #pragma mark- 协议
  184. /** checkBox图片组,[uncheckedImg,checkedImg]*/
  185. @property (nonatomic, copy) NSArray<UIImage *> *checkBoxImages;
  186. /** checkBox图片距离控件边框的填充,默认为 UIEdgeInsetsZero,确保控件大小减去内填充大小为资源图片大小情况下,图片才不会变形 **/
  187. @property (nonatomic, assign) UIEdgeInsets checkBoxImageEdgeInsets;
  188. /** checkBox是否勾选,默认NO */
  189. @property (nonatomic, assign) BOOL checkBoxIsChecked;
  190. /** checkBox是否隐藏,默认NO */
  191. @property (nonatomic, assign) BOOL checkBoxIsHidden;
  192. /** checkBox大小,高宽一样,必须大于0 */
  193. @property (nonatomic, assign) CGFloat checkBoxWH;
  194. /** checkBox是否和协议内容垂直居中,默认NO,即顶部对齐 */
  195. @property (nonatomic, assign) BOOL checkBoxVerticalCenter;
  196. /** 协议1,[协议名称,协议Url],注:三个协议名称不能相同 */
  197. @property (nonatomic, copy) NSArray<NSString *> *privacyOne;
  198. /** 协议2,[协议名称,协议Url],注:三个协议名称不能相同 */
  199. @property (nonatomic, copy) NSArray<NSString *> *privacyTwo;
  200. /** 协议3,[协议名称,协议Url],注:三个协议名称不能相同 */
  201. @property (nonatomic, copy) NSArray<NSString *> *privacyThree;
  202. /** 协议名称之间连接字符串数组,默认 ["和","、","、"] ,即第一个为"和",其他为"、",按顺序读取,为空则取默认 */
  203. @property (nonatomic, copy) NSArray<NSString *> *privacyConectTexts;
  204. /** 协议内容颜色数组,[非点击文案颜色,点击文案颜色] */
  205. @property (nonatomic, copy) NSArray<UIColor *> *privacyColors;
  206. /** 运营商协议内容颜色 ,优先级最高,如果privacyOperatorColors不设置,则取privacyColors中的点击文案颜色,privacyColors不设置,则是默认色*/
  207. @property (nonatomic, strong) UIColor *privacyOperatorColor;
  208. /** 协议1内容颜色,优先级最高,如果privacyOneColors不设置,则取privacyColors中的点击文案颜色,privacyColors不设置,则是默认色*/
  209. @property (nonatomic, strong) UIColor *privacyOneColor;
  210. /** 协议2内容颜色,优先级最高,如果privacyTwoColors不设置,则取privacyColors中的点击文案颜色,privacyColors不设置,则是默认色*/
  211. @property (nonatomic, strong) UIColor *privacyTwoColor;
  212. /** 协议3内容颜色,优先级最高,如果privacyThreeColors不设置,则取privacyColors中的点击文案颜色,privacyColors不设置,则是默认色*/
  213. @property (nonatomic, strong) UIColor *privacyThreeColor;
  214. /** 协议文案支持居中、居左、居右设置,默认居左 */
  215. @property (nonatomic, assign) NSTextAlignment privacyAlignment;
  216. /** 协议整体文案,前缀部分文案 */
  217. @property (nonatomic, copy) NSString *privacyPreText;
  218. /** 协议整体文案,后缀部分文案 */
  219. @property (nonatomic, copy) NSString *privacySufText;
  220. /** 运营商协议名称前缀文案,仅支持 <([《(【『 */
  221. @property (nonatomic, copy) NSString *privacyOperatorPreText;
  222. /** 运营商协议名称后缀文案,仅支持 >)]》)】』*/
  223. @property (nonatomic, copy) NSString *privacyOperatorSufText;
  224. /** 运营商协议指定显示顺序,默认0,即第1个协议显示,最大值可为3,即第4个协议显示*/
  225. @property (nonatomic, assign) NSInteger privacyOperatorIndex;
  226. /** 协议整体文案字体,小于12.0不生效 */
  227. @property (nonatomic, strong) UIFont *privacyFont;
  228. /** 协议整体文案行间距,默认0 */
  229. @property (nonatomic, assign) CGFloat privacyLineSpaceDp;
  230. /** 运营商协议文案字体,仅对运营商协议本体文案和前后缀生效,小于12.0不生效 */
  231. @property (nonatomic, strong) UIFont *privacyOperatorFont;
  232. /** 运营商协议文案下划线,仅对运营商协议本体文案和前后缀生效,YES:展示下划线;NO:不展示下划线,默认不展示 */
  233. @property (nonatomic, assign) BOOL privacyOperatorUnderline;
  234. /** checkBox是否扩大按钮可交互范围至"协议前缀部分文案(默认:我已阅读并同意)"区域,默认NO */
  235. @property (nonatomic, assign) BOOL expandAuthPageCheckedScope;
  236. /**
  237. * 构建协议整体(包括checkBox)的frame,view布局或布局发生变化时调用,不实现则按默认处理
  238. * 如果设置的width小于checkBox的宽则不生效,最小x、y为0,最大width、height为父试图宽高
  239. * 最终会根据设置进来的width对协议文本进行自适应,得到的size是协议控件的最终大小
  240. */
  241. @property (nonatomic, copy) PNSBuildFrameBlock privacyFrameBlock;
  242. /**
  243. * 未同意协议时点击登录按钮,协议整体文案的动画效果,不设置或设置为nil默认没有动画,SDK内部会主动更改动画的一些属性(包括:removedOnCompletion = NO、fillMode = kCAFillModeRemoved 及 delegate)
  244. */
  245. @property (nonatomic, strong, nullable) CAAnimation *privacyAnimation;
  246. /**
  247. * 未同意协议时点击登录按钮,checkbox的动画效果,不设置或设置为nil默认没有动画,SDK内部会主动更改动画的一些属性(包括:removedOnCompletion = NO、fillMode = kCAFillModeRemoved 及 delegate)
  248. */
  249. @property (nonatomic, strong, nullable) CAAnimation *checkboxAnimation;
  250. /** 协议整体相对屏幕底部的Y轴距离,与其他有区别!!不能小于0 */
  251. @property (nonatomic, assign) CGFloat privacyBottomOffetY DEPRECATED_MSG_ATTRIBUTE("Please use privacyFrameBlock instead");
  252. /** 协议整体(包括checkBox)相对content view的左右边距,当协议整体宽度小于(content view宽度-2*左右边距)且居中模式,则左右边距设置无效,不能小于0 */
  253. @property (nonatomic, assign) CGFloat privacyLRPadding DEPRECATED_MSG_ATTRIBUTE("Please use privacyFrameBlock instead");
  254. #pragma mark- 切换到其他方式
  255. /** changeBtn标题,内容、字体、大小、颜色 */
  256. @property (nonatomic, copy) NSAttributedString *changeBtnTitle;
  257. /** changeBtn是否隐藏,默认NO*/
  258. @property (nonatomic, assign) BOOL changeBtnIsHidden;
  259. /** 构建changeBtn的frame,view布局或布局发生变化时调用,不实现则按默认处理 */
  260. @property (nonatomic, copy) PNSBuildFrameBlock changeBtnFrameBlock;
  261. /** changeBtn相对导航栏底部或标题栏底部的Y轴距离 */
  262. @property (nonatomic, assign) CGFloat changeBtnTopOffetY DEPRECATED_MSG_ATTRIBUTE("Please use changeBtnFrameBlock instead");
  263. #pragma mark- 协议详情页
  264. /** 协议详情页容器是否自定义,默认NO,若为YES,则根据 PNSCodeLoginControllerClickProtocol 返回码获取协议点击详情信息 */
  265. @property (nonatomic, assign) BOOL privacyVCIsCustomized;
  266. /** 导航栏背景颜色设置 */
  267. @property (nonatomic, strong) UIColor *privacyNavColor;
  268. /** 导航栏标题字体、大小 */
  269. @property (nonatomic, strong) UIFont *privacyNavTitleFont;
  270. /** 导航栏标题颜色 */
  271. @property (nonatomic, strong) UIColor *privacyNavTitleColor;
  272. /** 导航栏返回图片 */
  273. @property (nonatomic, strong) UIImage *privacyNavBackImage;
  274. #pragma mark- 其他自定义控件添加及布局
  275. /**
  276. * 自定义控件添加,注意:自定义视图的创建初始化和添加到父视图,都需要在主线程!!
  277. * @param superCustomView 父视图
  278. */
  279. @property (nonatomic, copy) void(^customViewBlock)(UIView *superCustomView);
  280. /**
  281. * 每次授权页布局完成时会调用该block,可以在该block实现里面可设置自定义添加控件的frame
  282. * @param screenSize 屏幕的size
  283. * @param contentViewFrame content view的frame,
  284. * @param navFrame 导航栏的frame,仅全屏时有效
  285. * @param titleBarFrame 标题栏的frame,仅弹窗时有效
  286. * @param logoFrame logo图片的frame
  287. * @param sloganFrame slogan的frame
  288. * @param numberFrame 号码栏的frame
  289. * @param loginFrame 登录按钮的frame
  290. * @param changeBtnFrame 切换到其他方式按钮的frame
  291. * @param privacyFrame 协议整体(包括checkBox)的frame
  292. */
  293. @property (nonatomic, copy) void(^customViewLayoutBlock)(CGSize screenSize, CGRect contentViewFrame, CGRect navFrame, CGRect titleBarFrame, CGRect logoFrame, CGRect sloganFrame, CGRect numberFrame, CGRect loginFrame, CGRect changeBtnFrame, CGRect privacyFrame);
  294. #pragma mark - 二次隐私协议弹窗设置
  295. /** 二次隐私协议弹窗是否需要显示, 默认NO */
  296. @property (nonatomic, assign) BOOL privacyAlertIsNeedShow;
  297. /** 二次隐私协议弹窗点击按钮是否需要执行登陆,默认YES */
  298. @property (nonatomic, assign) BOOL privacyAlertIsNeedAutoLogin;
  299. /** 二次隐私协议弹窗显示自定义动画,默认从下往上位移动画 */
  300. @property (nonatomic, strong, nullable) CAAnimation *privacyAlertEntryAnimation;
  301. /** 二次隐私协议弹窗隐藏自定义动画,默认从上往下位移动画 */
  302. @property (nonatomic, strong, nullable) CAAnimation *privacyAlertExitAnimation;
  303. /** 二次隐私协议弹窗的四个圆角值,顺序为左上,左下,右下,右上,需要填充4个值,不足4个值则无效,如果值<=0则为直角 ,默认0*/
  304. @property (nonatomic, copy) NSArray<NSNumber *> *privacyAlertCornerRadiusArray;
  305. /** 二次隐私协议弹窗背景颜色,默认为白色 */
  306. @property (nonatomic, strong) UIColor *privacyAlertBackgroundColor;
  307. /** 二次隐私协议弹窗透明度,默认不透明1.0 ,设置范围0.3~1.0之间 */
  308. @property (nonatomic, assign) CGFloat privacyAlertAlpha;
  309. /** 二次隐私协议弹窗标题文字内容,默认"请阅读并同意以下条款" */
  310. @property (nonatomic, copy) NSString *privacyAlertTitleContent;
  311. /** 二次隐私协议弹窗标题文字字体,最小12,默认12 */
  312. @property (nonatomic, strong) UIFont *privacyAlertTitleFont;
  313. /** 二次隐私协议弹窗标题文字颜色,默认黑色 */
  314. @property (nonatomic, strong) UIColor *privacyAlertTitleColor;
  315. /** 二次隐私协议弹窗标题背景颜色,默认白色*/
  316. @property (nonatomic, strong) UIColor *privacyAlertTitleBackgroundColor;
  317. /** 二次隐私协议弹窗标题位置,默认居中*/
  318. @property (nonatomic, assign) NSTextAlignment privacyAlertTitleAlignment;
  319. /** 二次隐私协议弹窗协议内容文字字体,最小12,默认12 */
  320. @property (nonatomic, strong) UIFont *privacyAlertContentFont;
  321. /** 二次隐私协议弹窗协议内容行间距,默认0 */
  322. @property (nonatomic, assign) CGFloat privacyAlertLineSpaceDp;
  323. /** 二次隐私协议弹窗协议内容背景颜色,默认白色 */
  324. @property (nonatomic, strong) UIColor *privacyAlertContentBackgroundColor;
  325. /** 二次隐私协议弹窗协议内容颜色数组,[非点击文案颜色,点击文案颜色],默认[0x999999,0x1890FF] */
  326. @property (nonatomic, copy) NSArray<UIColor *> *privacyAlertContentColors;
  327. /** 二次隐私协议弹窗运营商协议内容文字字体,仅对运营商协议部分的文本生效,最小12,默认12 */
  328. @property (nonatomic, strong) UIFont *privacyAlertContentOperatorFont;
  329. /** 二次隐私协议弹窗运营商协议内容文字下划线,仅对运营商协议部分的文本生效,YES:展示下划线,NO:不展示下划线,默认不展示 */
  330. @property (nonatomic, assign) BOOL privacyAlertContentUnderline;
  331. /** 二次隐私协议弹窗协议运营商协议内容颜色,优先级最高,如果privacyAlertOperatorColors不设置,则取privacyAlertContentColors中的点击文案颜色,privacyAlertContentColors不设置,则是默认色*/
  332. @property (nonatomic, strong) UIColor *privacyAlertOperatorColor;
  333. /** 二次隐私协议弹窗协议协议1内容颜色 ,优先级最高,如果privacyAlertOneColors不设置,则取privacyAlertContentColors中的点击文案颜色,privacyAlertContentColors不设置,则是默认色*/
  334. @property (nonatomic, strong) UIColor *privacyAlertOneColor;
  335. /** 二次隐私协议弹窗协议协议2内容颜色 ,优先级最高,如果privacyAlertTwoColors不设置,则取privacyAlertContentColors中的点击文案颜色,privacyAlertContentColors不设置,则是默认色*/
  336. @property (nonatomic, strong) UIColor *privacyAlertTwoColor;
  337. /** 二次隐私协议弹窗协议协议3内容颜色 ,优先级最高,如果privacyAlertThreeColors不设置,则取privacyAlertContentColors中的点击文案颜色,privacyAlertContentColors不设置,则是默认色*/
  338. @property (nonatomic, strong) UIColor *privacyAlertThreeColor;
  339. /** 二次隐私协议弹窗协议文案支持居中、居左、居右设置,默认居左 */
  340. @property (nonatomic, assign) NSTextAlignment privacyAlertContentAlignment;
  341. /** 二次隐私协议弹窗协议整体文案,前缀部分文案 ,如果不赋值,默认使用privacyPreText*/
  342. @property (nonatomic, copy) NSString *privacyAlertPreText;
  343. /** 二次隐私协议弹窗协议整体文案,后缀部分文案 如果不赋值,默认使用privacySufText*/
  344. @property (nonatomic, copy) NSString *privacyAlertSufText;
  345. /** 二次隐私协议弹窗按钮文字内容 默认“同意”*/
  346. @property (nonatomic, copy) NSString *privacyAlertBtnContent;
  347. /** 二次隐私协议弹窗按钮按钮背景图片 ,默认高度50.0pt,@[激活状态的图片,高亮状态的图片] */
  348. @property (nonatomic, copy) NSArray<UIImage *> *privacyAlertBtnBackgroundImages;
  349. /** 二次隐私协议弹窗按钮文字颜色,默认黑色, @[激活状态的颜色,高亮状态的颜色] */
  350. @property (nonatomic, copy) NSArray<UIColor *> *privacyAlertButtonTextColors;
  351. /** 二次隐私协议弹窗按钮文字字体,最小10,默认18*/
  352. @property (nonatomic, strong) UIFont *privacyAlertButtonFont;
  353. /** 二次隐私协议弹窗关闭按钮是否显示,默认显示 */
  354. @property (nonatomic, assign) BOOL privacyAlertCloseButtonIsNeedShow;
  355. /** 二次隐私协议弹窗右侧关闭按钮图片设置,默认内置的X图片*/
  356. @property (nonatomic, strong) UIImage *privacyAlertCloseButtonImage;
  357. /** 二次隐私协议弹窗背景蒙层是否显示 ,默认YES*/
  358. @property (nonatomic, assign) BOOL privacyAlertMaskIsNeedShow;
  359. /** 二次隐私协议弹窗点击背景蒙层是否关闭弹窗 ,默认YES*/
  360. @property (nonatomic, assign) BOOL tapPrivacyAlertMaskCloseAlert;
  361. /** 二次隐私协议弹窗蒙版背景颜色,默认黑色 */
  362. @property (nonatomic, strong) UIColor *privacyAlertMaskColor;
  363. /** 二次隐私协议弹窗蒙版透明度 设置范围0.3~1.0之间 ,默认0.5*/
  364. @property (nonatomic, assign) CGFloat privacyAlertMaskAlpha;
  365. /** 二次隐私协议弹窗蒙版显示动画,默认渐显动画 */
  366. @property (nonatomic, strong) CAAnimation *privacyAlertMaskEntryAnimation;
  367. /** 二次隐私协议弹窗蒙版消失动画,默认渐隐动画 */
  368. @property (nonatomic, strong) CAAnimation *privacyAlertMaskExitAnimation;
  369. /** 二次隐私协议弹窗尺寸设置,不能超出父视图 content view,height不能小于50,width不能小于0,默认屏幕居中,宽为屏幕的宽度减掉80,高为200 */
  370. @property (nonatomic, copy) PNSBuildFrameBlock privacyAlertFrameBlock;
  371. /** 二次隐私协议弹窗标题尺寸,默认x=0,y=0,width=弹窗宽度,最小宽度为100,height=根据文本计算的高度,最小高度为15,不能超出父视图 */
  372. @property (nonatomic, copy) PNSBuildFrameBlock privacyAlertTitleFrameBlock;
  373. /** 二次隐私协议弹窗内容尺寸,默认为从标题顶部位置开始,最终会根据设置进来的width对协议文本进行自适应,得到的size是协议控件的最终大小。不能超出父视图 */
  374. @property (nonatomic, copy) PNSBuildFrameBlock privacyAlertPrivacyContentFrameBlock;
  375. /** 二次隐私协议弹窗确认按钮尺寸,默认为父视图的宽度一半,居中显示。高度默认50, */
  376. @property (nonatomic, copy) PNSBuildFrameBlock privacyAlertButtonFrameBlock;
  377. /** 二次隐私协议弹窗右侧关闭按钮尺寸,默认宽高44,居弹窗右侧15,居弹窗顶部0*/
  378. @property (nonatomic, copy) PNSBuildFrameBlock privacyAlertCloseFrameBlock;
  379. /**
  380. * 二次授权页弹窗自定义控件添加,注意:自定义视图的创建初始化和添加到父视图,都需要在主线程!!
  381. * @param superPrivacyAlertCustomView 父视图
  382. */
  383. @property (nonatomic, copy) void(^privacyAlertCustomViewBlock)(UIView *superPrivacyAlertCustomView);
  384. /**
  385. * 二次授权页弹窗布局完成时会调用该block,可以在该block实现里面可设置自定义添加控件的frame
  386. * @param privacyAlertFrame 二次授权页弹窗frame
  387. * @param privacyAlertTitleFrame 二次授权页弹窗标题frame
  388. * @param privacyAlertPrivacyContentFrame 二次授权页弹窗协议内容frame
  389. * @param privacyAlertButtonFrame 二次授权页弹窗确认按钮frame
  390. * @param privacyAlertCloseFrame 二次授权页弹窗右上角关闭按钮frame
  391. */
  392. @property (nonatomic, copy) void(^privacyAlertCustomViewLayoutBlock)(CGRect privacyAlertFrame, CGRect privacyAlertTitleFrame, CGRect privacyAlertPrivacyContentFrame, CGRect privacyAlertButtonFrame, CGRect privacyAlertCloseFrame);
  393. @end
  394. NS_ASSUME_NONNULL_END