JLChen
2021-02-01 7ab063d5c658143b5bce7ca8e5ae9bfc700bb1d8
2021-02-01 1.更新
25 文件已复制
20个文件已添加
35个文件已删除
76个文件已修改
45 文件已重命名
7216 ■■■■ 已修改文件
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo.xcodeproj/project.pbxproj 362 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/AppDelegate.m 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/AddDevice.storyboard 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/EZMain.storyboard 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/Localizable.strings 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/GlobalKit.h 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/TableViewCells/DeviceListCell.m 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZDeviceTableViewController.m 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZEditViewController.m 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZPlaybackViewController.m 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZSettingViewController.m 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.m 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/LICENSE 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.h 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.m 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.m 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.m 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefreshConst.h 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefreshConst.m 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.h 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.m 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.m 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIView+MJExtension.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIView+MJExtension.m 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.m 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/README.md 362 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.h 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASCompositeConstraint.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASCompositeConstraint.m 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint+Private.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.h 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.m 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.h 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.m 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASLayoutConstraint.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASLayoutConstraint.m 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASUtilities.h 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.m 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.m 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/Masonry.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.h 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.m 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASShorthandAdditions.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.h 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.m 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASShorthandAdditions.h 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/ViewController+MASAdditions.h 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/ViewController+MASAdditions.m 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/en.lproj/EZMain.strings 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/EZMain.strings 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/Localizable.strings 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK.IOS/EZSDK.IOS/ApiDefinition.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK.xcodeproj/project.pbxproj 508 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/DemoAPITableViewController.h 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/DemoAPITableViewController.m 210 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/EZPlayDemoViewController.h 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/EZPlayDemoViewController.m 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Global/GlobalKit.h 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceTableViewController.m 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/UIViewControllers/EZEditViewController.m 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/UIViewControllers/EZPlaybackViewController.m 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/UIViewControllers/EZSettingViewController.m 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshAutoFooter.h 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshAutoFooter.m 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshBackFooter.m 166 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshComponent.h 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshComponent.m 226 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshFooter.h 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshFooter.m 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshHeader.m 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.m 139 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/LICENSE 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m 29 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.h 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.m 76 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.m 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.m 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefreshConst.h 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefreshConst.m 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.h 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.m 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.m 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIView+MJExtension.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIView+MJExtension.m 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefreshConst.h 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefreshConst.m 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/README.md 362 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJExtension.h 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJExtension.m 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJRefresh.h 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJRefresh.m 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASCompositeConstraint.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASCompositeConstraint.m 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint+Private.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.h 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.m 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.h 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.m 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASLayoutConstraint.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASLayoutConstraint.m 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASUtilities.h 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.m 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.m 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/Masonry.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.h 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.m 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASShorthandAdditions.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.h 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.m 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/View+MASShorthandAdditions.h 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/ViewController+MASAdditions.h 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZ/Venders/Masonry/ViewController+MASAdditions.m 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZSDK.h 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EZSDK/EZSDK/EZSDK.m 272 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo.xcodeproj/project.pbxproj
@@ -49,25 +49,6 @@
        0D8CF3771BDF1ABA00A50266 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3761BDF1ABA00A50266 /* ViewController.m */; };
        0D8CF37A1BDF1ABA00A50266 /* EZMain.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0D8CF3781BDF1ABA00A50266 /* EZMain.storyboard */; };
        0D8CF37C1BDF1ABA00A50266 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0D8CF37B1BDF1ABA00A50266 /* Assets.xcassets */; };
        0D8CF3D71BDF516700A50266 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3AD1BDF516700A50266 /* MJRefreshAutoFooter.m */; };
        0D8CF3D81BDF516700A50266 /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3AF1BDF516700A50266 /* MJRefreshBackFooter.m */; };
        0D8CF3D91BDF516700A50266 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3B11BDF516700A50266 /* MJRefreshComponent.m */; };
        0D8CF3DA1BDF516700A50266 /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3B31BDF516700A50266 /* MJRefreshFooter.m */; };
        0D8CF3DB1BDF516700A50266 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3B51BDF516700A50266 /* MJRefreshHeader.m */; };
        0D8CF3DC1BDF516700A50266 /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3BA1BDF516700A50266 /* MJRefreshAutoGifFooter.m */; };
        0D8CF3DD1BDF516700A50266 /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3BC1BDF516700A50266 /* MJRefreshAutoNormalFooter.m */; };
        0D8CF3DE1BDF516700A50266 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3BE1BDF516700A50266 /* MJRefreshAutoStateFooter.m */; };
        0D8CF3DF1BDF516700A50266 /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3C11BDF516700A50266 /* MJRefreshBackGifFooter.m */; };
        0D8CF3E01BDF516700A50266 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3C31BDF516700A50266 /* MJRefreshBackNormalFooter.m */; };
        0D8CF3E11BDF516700A50266 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3C51BDF516700A50266 /* MJRefreshBackStateFooter.m */; };
        0D8CF3E21BDF516700A50266 /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3C81BDF516700A50266 /* MJRefreshGifHeader.m */; };
        0D8CF3E31BDF516700A50266 /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3CA1BDF516700A50266 /* MJRefreshNormalHeader.m */; };
        0D8CF3E41BDF516700A50266 /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3CC1BDF516700A50266 /* MJRefreshStateHeader.m */; };
        0D8CF3E51BDF516700A50266 /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0D8CF3CD1BDF516700A50266 /* MJRefresh.bundle */; };
        0D8CF3E61BDF516700A50266 /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3D01BDF516700A50266 /* MJRefreshConst.m */; };
        0D8CF3E71BDF516700A50266 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3D21BDF516700A50266 /* UIScrollView+MJExtension.m */; };
        0D8CF3E81BDF516700A50266 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3D41BDF516700A50266 /* UIScrollView+MJRefresh.m */; };
        0D8CF3E91BDF516700A50266 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3D61BDF516700A50266 /* UIView+MJExtension.m */; };
        0D8CF4A61BDF555600A50266 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D8CF4A31BDF555600A50266 /* libcrypto.a */; };
        0D8CF4A71BDF555600A50266 /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D8CF4A41BDF555600A50266 /* libssl.a */; };
        0D8CF4AB1BDF558500A50266 /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D8CF4AA1BDF558500A50266 /* VideoToolbox.framework */; };
@@ -160,6 +141,28 @@
        49D4B4AE1F6BB99900ADF471 /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 49D4B4AD1F6BB99900ADF471 /* libbz2.tbd */; };
        B95004F125B927D0002D3C58 /* com.hri.hpc.mobile.ios.player.metallib in Resources */ = {isa = PBXBuildFile; fileRef = B95004F025B927D0002D3C58 /* com.hri.hpc.mobile.ios.player.metallib */; };
        B95004F725B929EF002D3C58 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B95004F625B929EF002D3C58 /* Launch Screen.storyboard */; };
        B9EA4E3825C7E7AB000FFDA2 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = B9EA4E0725C7E7AB000FFDA2 /* LICENSE */; };
        B9EA4E3925C7E7AB000FFDA2 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E0925C7E7AB000FFDA2 /* UIScrollView+MJRefresh.m */; };
        B9EA4E3A25C7E7AB000FFDA2 /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E0A25C7E7AB000FFDA2 /* MJRefreshConst.m */; };
        B9EA4E3B25C7E7AB000FFDA2 /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = B9EA4E0E25C7E7AB000FFDA2 /* MJRefresh.bundle */; };
        B9EA4E3C25C7E7AB000FFDA2 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E1025C7E7AB000FFDA2 /* UIScrollView+MJExtension.m */; };
        B9EA4E3D25C7E7AB000FFDA2 /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E1325C7E7AB000FFDA2 /* NSBundle+MJRefresh.m */; };
        B9EA4E3E25C7E7AB000FFDA2 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E1425C7E7AB000FFDA2 /* UIView+MJExtension.m */; };
        B9EA4E3F25C7E7AB000FFDA2 /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E1B25C7E7AB000FFDA2 /* MJRefreshBackGifFooter.m */; };
        B9EA4E4025C7E7AB000FFDA2 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E1C25C7E7AB000FFDA2 /* MJRefreshBackStateFooter.m */; };
        B9EA4E4125C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E1D25C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.m */; };
        B9EA4E4225C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2225C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.m */; };
        B9EA4E4325C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2325C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.m */; };
        B9EA4E4425C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2425C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.m */; };
        B9EA4E4525C7E7AB000FFDA2 /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2625C7E7AB000FFDA2 /* MJRefreshNormalHeader.m */; };
        B9EA4E4625C7E7AB000FFDA2 /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2A25C7E7AB000FFDA2 /* MJRefreshStateHeader.m */; };
        B9EA4E4725C7E7AB000FFDA2 /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2B25C7E7AB000FFDA2 /* MJRefreshGifHeader.m */; };
        B9EA4E4825C7E7AB000FFDA2 /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2D25C7E7AB000FFDA2 /* MJRefreshFooter.m */; };
        B9EA4E4925C7E7AB000FFDA2 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2F25C7E7AB000FFDA2 /* MJRefreshHeader.m */; };
        B9EA4E4A25C7E7AB000FFDA2 /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E3125C7E7AB000FFDA2 /* MJRefreshBackFooter.m */; };
        B9EA4E4B25C7E7AB000FFDA2 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E3225C7E7AB000FFDA2 /* MJRefreshAutoFooter.m */; };
        B9EA4E4C25C7E7AB000FFDA2 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E3425C7E7AB000FFDA2 /* MJRefreshComponent.m */; };
        B9EA4E4D25C7E7AB000FFDA2 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = B9EA4E3725C7E7AB000FFDA2 /* README.md */; };
        C437D74524723C1A0012D982 /* EZHubDebugViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C437D74424723C1A0012D982 /* EZHubDebugViewController.m */; };
        C4404531236AF41400EC470E /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4404530236AF41400EC470E /* NetworkExtension.framework */; };
        C4404533236AF41400EC470E /* ExternalAccessory.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4404532236AF41400EC470E /* ExternalAccessory.framework */; };
@@ -297,44 +300,6 @@
        0D8CF3801BDF1ABA00A50266 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
        0D8CF3851BDF1ABA00A50266 /* EZOpenSDKDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EZOpenSDKDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
        0D8CF3901BDF1ABA00A50266 /* EZOpenSDKDemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EZOpenSDKDemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
        0D8CF3AC1BDF516700A50266 /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoFooter.h; sourceTree = "<group>"; };
        0D8CF3AD1BDF516700A50266 /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoFooter.m; sourceTree = "<group>"; };
        0D8CF3AE1BDF516700A50266 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackFooter.h; sourceTree = "<group>"; };
        0D8CF3AF1BDF516700A50266 /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackFooter.m; sourceTree = "<group>"; };
        0D8CF3B01BDF516700A50266 /* MJRefreshComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshComponent.h; sourceTree = "<group>"; };
        0D8CF3B11BDF516700A50266 /* MJRefreshComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshComponent.m; sourceTree = "<group>"; };
        0D8CF3B21BDF516700A50266 /* MJRefreshFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshFooter.h; sourceTree = "<group>"; };
        0D8CF3B31BDF516700A50266 /* MJRefreshFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshFooter.m; sourceTree = "<group>"; };
        0D8CF3B41BDF516700A50266 /* MJRefreshHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshHeader.h; sourceTree = "<group>"; };
        0D8CF3B51BDF516700A50266 /* MJRefreshHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshHeader.m; sourceTree = "<group>"; };
        0D8CF3B91BDF516700A50266 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoGifFooter.h; sourceTree = "<group>"; };
        0D8CF3BA1BDF516700A50266 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoGifFooter.m; sourceTree = "<group>"; };
        0D8CF3BB1BDF516700A50266 /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoNormalFooter.h; sourceTree = "<group>"; };
        0D8CF3BC1BDF516700A50266 /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoNormalFooter.m; sourceTree = "<group>"; };
        0D8CF3BD1BDF516700A50266 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoStateFooter.h; sourceTree = "<group>"; };
        0D8CF3BE1BDF516700A50266 /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoStateFooter.m; sourceTree = "<group>"; };
        0D8CF3C01BDF516700A50266 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackGifFooter.h; sourceTree = "<group>"; };
        0D8CF3C11BDF516700A50266 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackGifFooter.m; sourceTree = "<group>"; };
        0D8CF3C21BDF516700A50266 /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackNormalFooter.h; sourceTree = "<group>"; };
        0D8CF3C31BDF516700A50266 /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackNormalFooter.m; sourceTree = "<group>"; };
        0D8CF3C41BDF516700A50266 /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackStateFooter.h; sourceTree = "<group>"; };
        0D8CF3C51BDF516700A50266 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackStateFooter.m; sourceTree = "<group>"; };
        0D8CF3C71BDF516700A50266 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshGifHeader.h; sourceTree = "<group>"; };
        0D8CF3C81BDF516700A50266 /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshGifHeader.m; sourceTree = "<group>"; };
        0D8CF3C91BDF516700A50266 /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshNormalHeader.h; sourceTree = "<group>"; };
        0D8CF3CA1BDF516700A50266 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshNormalHeader.m; sourceTree = "<group>"; };
        0D8CF3CB1BDF516700A50266 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshStateHeader.h; sourceTree = "<group>"; };
        0D8CF3CC1BDF516700A50266 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshStateHeader.m; sourceTree = "<group>"; };
        0D8CF3CD1BDF516700A50266 /* MJRefresh.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MJRefresh.bundle; sourceTree = "<group>"; };
        0D8CF3CE1BDF516700A50266 /* MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefresh.h; sourceTree = "<group>"; };
        0D8CF3CF1BDF516700A50266 /* MJRefreshConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshConst.h; sourceTree = "<group>"; };
        0D8CF3D01BDF516700A50266 /* MJRefreshConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshConst.m; sourceTree = "<group>"; };
        0D8CF3D11BDF516700A50266 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJExtension.h"; sourceTree = "<group>"; };
        0D8CF3D21BDF516700A50266 /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJExtension.m"; sourceTree = "<group>"; };
        0D8CF3D31BDF516700A50266 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJRefresh.h"; sourceTree = "<group>"; };
        0D8CF3D41BDF516700A50266 /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJRefresh.m"; sourceTree = "<group>"; };
        0D8CF3D51BDF516700A50266 /* UIView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+MJExtension.h"; sourceTree = "<group>"; };
        0D8CF3D61BDF516700A50266 /* UIView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+MJExtension.m"; sourceTree = "<group>"; };
        0D8CF4521BDF555500A50266 /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = "<group>"; };
        0D8CF4541BDF555500A50266 /* asn1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1.h; sourceTree = "<group>"; };
        0D8CF4551BDF555500A50266 /* asn1_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1_mac.h; sourceTree = "<group>"; };
@@ -599,6 +564,48 @@
        49D4B4AD1F6BB99900ADF471 /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; };
        B95004F025B927D0002D3C58 /* com.hri.hpc.mobile.ios.player.metallib */ = {isa = PBXFileReference; lastKnownFileType = "archive.metal-library"; path = com.hri.hpc.mobile.ios.player.metallib; sourceTree = "<group>"; };
        B95004F625B929EF002D3C58 /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
        B9EA4E0725C7E7AB000FFDA2 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
        B9EA4E0925C7E7AB000FFDA2 /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJRefresh.m"; sourceTree = "<group>"; };
        B9EA4E0A25C7E7AB000FFDA2 /* MJRefreshConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshConst.m; sourceTree = "<group>"; };
        B9EA4E0B25C7E7AB000FFDA2 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJExtension.h"; sourceTree = "<group>"; };
        B9EA4E0C25C7E7AB000FFDA2 /* MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefresh.h; sourceTree = "<group>"; };
        B9EA4E0D25C7E7AB000FFDA2 /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+MJRefresh.h"; sourceTree = "<group>"; };
        B9EA4E0E25C7E7AB000FFDA2 /* MJRefresh.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MJRefresh.bundle; sourceTree = "<group>"; };
        B9EA4E0F25C7E7AB000FFDA2 /* UIView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+MJExtension.h"; sourceTree = "<group>"; };
        B9EA4E1025C7E7AB000FFDA2 /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJExtension.m"; sourceTree = "<group>"; };
        B9EA4E1125C7E7AB000FFDA2 /* MJRefreshConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshConst.h; sourceTree = "<group>"; };
        B9EA4E1225C7E7AB000FFDA2 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJRefresh.h"; sourceTree = "<group>"; };
        B9EA4E1325C7E7AB000FFDA2 /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+MJRefresh.m"; sourceTree = "<group>"; };
        B9EA4E1425C7E7AB000FFDA2 /* UIView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+MJExtension.m"; sourceTree = "<group>"; };
        B9EA4E1825C7E7AB000FFDA2 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackGifFooter.h; sourceTree = "<group>"; };
        B9EA4E1925C7E7AB000FFDA2 /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackStateFooter.h; sourceTree = "<group>"; };
        B9EA4E1A25C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackNormalFooter.h; sourceTree = "<group>"; };
        B9EA4E1B25C7E7AB000FFDA2 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackGifFooter.m; sourceTree = "<group>"; };
        B9EA4E1C25C7E7AB000FFDA2 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackStateFooter.m; sourceTree = "<group>"; };
        B9EA4E1D25C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackNormalFooter.m; sourceTree = "<group>"; };
        B9EA4E1F25C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoStateFooter.h; sourceTree = "<group>"; };
        B9EA4E2025C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoNormalFooter.h; sourceTree = "<group>"; };
        B9EA4E2125C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoGifFooter.h; sourceTree = "<group>"; };
        B9EA4E2225C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoStateFooter.m; sourceTree = "<group>"; };
        B9EA4E2325C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoGifFooter.m; sourceTree = "<group>"; };
        B9EA4E2425C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoNormalFooter.m; sourceTree = "<group>"; };
        B9EA4E2625C7E7AB000FFDA2 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshNormalHeader.m; sourceTree = "<group>"; };
        B9EA4E2725C7E7AB000FFDA2 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshStateHeader.h; sourceTree = "<group>"; };
        B9EA4E2825C7E7AB000FFDA2 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshGifHeader.h; sourceTree = "<group>"; };
        B9EA4E2925C7E7AB000FFDA2 /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshNormalHeader.h; sourceTree = "<group>"; };
        B9EA4E2A25C7E7AB000FFDA2 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshStateHeader.m; sourceTree = "<group>"; };
        B9EA4E2B25C7E7AB000FFDA2 /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshGifHeader.m; sourceTree = "<group>"; };
        B9EA4E2D25C7E7AB000FFDA2 /* MJRefreshFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshFooter.m; sourceTree = "<group>"; };
        B9EA4E2E25C7E7AB000FFDA2 /* MJRefreshComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshComponent.h; sourceTree = "<group>"; };
        B9EA4E2F25C7E7AB000FFDA2 /* MJRefreshHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshHeader.m; sourceTree = "<group>"; };
        B9EA4E3025C7E7AB000FFDA2 /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoFooter.h; sourceTree = "<group>"; };
        B9EA4E3125C7E7AB000FFDA2 /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackFooter.m; sourceTree = "<group>"; };
        B9EA4E3225C7E7AB000FFDA2 /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoFooter.m; sourceTree = "<group>"; };
        B9EA4E3325C7E7AB000FFDA2 /* MJRefreshHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshHeader.h; sourceTree = "<group>"; };
        B9EA4E3425C7E7AB000FFDA2 /* MJRefreshComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshComponent.m; sourceTree = "<group>"; };
        B9EA4E3525C7E7AB000FFDA2 /* MJRefreshFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshFooter.h; sourceTree = "<group>"; };
        B9EA4E3625C7E7AB000FFDA2 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackFooter.h; sourceTree = "<group>"; };
        B9EA4E3725C7E7AB000FFDA2 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
        C437D74324723C1A0012D982 /* EZHubDebugViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EZHubDebugViewController.h; sourceTree = "<group>"; };
        C437D74424723C1A0012D982 /* EZHubDebugViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EZHubDebugViewController.m; sourceTree = "<group>"; };
        C4404530236AF41400EC470E /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
@@ -876,6 +883,7 @@
        0D8CF3A91BDF516700A50266 /* Venders */ = {
            isa = PBXGroup;
            children = (
                B9EA4E0625C7E7AA000FFDA2 /* MJRefresh */,
                C4A41D7C23D6E4DC00D59722 /* Toast */,
                0D9ACAD31C7EE4D100B4DE97 /* UIKit+AFNetworking */,
                0D2E4B991C7DB2E200CA948A /* AFNetworking */,
@@ -889,102 +897,8 @@
                0DCE0BAF1BE1C9A9000EA68A /* Masonry */,
                0D8CF4D11BDF898800A50266 /* UITableView-FDTemplateLayoutCell */,
                0D8CF44F1BDF555500A50266 /* openssl */,
                0D8CF3AA1BDF516700A50266 /* MJRefresh */,
            );
            path = Venders;
            sourceTree = "<group>";
        };
        0D8CF3AA1BDF516700A50266 /* MJRefresh */ = {
            isa = PBXGroup;
            children = (
                0D8CF3AB1BDF516700A50266 /* Base */,
                0D8CF3B61BDF516700A50266 /* Custom */,
                0D8CF3CD1BDF516700A50266 /* MJRefresh.bundle */,
                0D8CF3CE1BDF516700A50266 /* MJRefresh.h */,
                0D8CF3CF1BDF516700A50266 /* MJRefreshConst.h */,
                0D8CF3D01BDF516700A50266 /* MJRefreshConst.m */,
                0D8CF3D11BDF516700A50266 /* UIScrollView+MJExtension.h */,
                0D8CF3D21BDF516700A50266 /* UIScrollView+MJExtension.m */,
                0D8CF3D31BDF516700A50266 /* UIScrollView+MJRefresh.h */,
                0D8CF3D41BDF516700A50266 /* UIScrollView+MJRefresh.m */,
                0D8CF3D51BDF516700A50266 /* UIView+MJExtension.h */,
                0D8CF3D61BDF516700A50266 /* UIView+MJExtension.m */,
            );
            path = MJRefresh;
            sourceTree = "<group>";
        };
        0D8CF3AB1BDF516700A50266 /* Base */ = {
            isa = PBXGroup;
            children = (
                0D8CF3AC1BDF516700A50266 /* MJRefreshAutoFooter.h */,
                0D8CF3AD1BDF516700A50266 /* MJRefreshAutoFooter.m */,
                0D8CF3AE1BDF516700A50266 /* MJRefreshBackFooter.h */,
                0D8CF3AF1BDF516700A50266 /* MJRefreshBackFooter.m */,
                0D8CF3B01BDF516700A50266 /* MJRefreshComponent.h */,
                0D8CF3B11BDF516700A50266 /* MJRefreshComponent.m */,
                0D8CF3B21BDF516700A50266 /* MJRefreshFooter.h */,
                0D8CF3B31BDF516700A50266 /* MJRefreshFooter.m */,
                0D8CF3B41BDF516700A50266 /* MJRefreshHeader.h */,
                0D8CF3B51BDF516700A50266 /* MJRefreshHeader.m */,
            );
            path = Base;
            sourceTree = "<group>";
        };
        0D8CF3B61BDF516700A50266 /* Custom */ = {
            isa = PBXGroup;
            children = (
                0D8CF3B71BDF516700A50266 /* Footer */,
                0D8CF3C61BDF516700A50266 /* Header */,
            );
            path = Custom;
            sourceTree = "<group>";
        };
        0D8CF3B71BDF516700A50266 /* Footer */ = {
            isa = PBXGroup;
            children = (
                0D8CF3B81BDF516700A50266 /* Auto */,
                0D8CF3BF1BDF516700A50266 /* Back */,
            );
            path = Footer;
            sourceTree = "<group>";
        };
        0D8CF3B81BDF516700A50266 /* Auto */ = {
            isa = PBXGroup;
            children = (
                0D8CF3B91BDF516700A50266 /* MJRefreshAutoGifFooter.h */,
                0D8CF3BA1BDF516700A50266 /* MJRefreshAutoGifFooter.m */,
                0D8CF3BB1BDF516700A50266 /* MJRefreshAutoNormalFooter.h */,
                0D8CF3BC1BDF516700A50266 /* MJRefreshAutoNormalFooter.m */,
                0D8CF3BD1BDF516700A50266 /* MJRefreshAutoStateFooter.h */,
                0D8CF3BE1BDF516700A50266 /* MJRefreshAutoStateFooter.m */,
            );
            path = Auto;
            sourceTree = "<group>";
        };
        0D8CF3BF1BDF516700A50266 /* Back */ = {
            isa = PBXGroup;
            children = (
                0D8CF3C01BDF516700A50266 /* MJRefreshBackGifFooter.h */,
                0D8CF3C11BDF516700A50266 /* MJRefreshBackGifFooter.m */,
                0D8CF3C21BDF516700A50266 /* MJRefreshBackNormalFooter.h */,
                0D8CF3C31BDF516700A50266 /* MJRefreshBackNormalFooter.m */,
                0D8CF3C41BDF516700A50266 /* MJRefreshBackStateFooter.h */,
                0D8CF3C51BDF516700A50266 /* MJRefreshBackStateFooter.m */,
            );
            path = Back;
            sourceTree = "<group>";
        };
        0D8CF3C61BDF516700A50266 /* Header */ = {
            isa = PBXGroup;
            children = (
                0D8CF3C71BDF516700A50266 /* MJRefreshGifHeader.h */,
                0D8CF3C81BDF516700A50266 /* MJRefreshGifHeader.m */,
                0D8CF3C91BDF516700A50266 /* MJRefreshNormalHeader.h */,
                0D8CF3CA1BDF516700A50266 /* MJRefreshNormalHeader.m */,
                0D8CF3CB1BDF516700A50266 /* MJRefreshStateHeader.h */,
                0D8CF3CC1BDF516700A50266 /* MJRefreshStateHeader.m */,
            );
            path = Header;
            sourceTree = "<group>";
        };
        0D8CF44F1BDF555500A50266 /* openssl */ = {
@@ -1398,6 +1312,111 @@
            name = Category;
            sourceTree = "<group>";
        };
        B9EA4E0625C7E7AA000FFDA2 /* MJRefresh */ = {
            isa = PBXGroup;
            children = (
                B9EA4E0725C7E7AB000FFDA2 /* LICENSE */,
                B9EA4E0825C7E7AB000FFDA2 /* MJRefresh */,
                B9EA4E3725C7E7AB000FFDA2 /* README.md */,
            );
            path = MJRefresh;
            sourceTree = "<group>";
        };
        B9EA4E0825C7E7AB000FFDA2 /* MJRefresh */ = {
            isa = PBXGroup;
            children = (
                B9EA4E0925C7E7AB000FFDA2 /* UIScrollView+MJRefresh.m */,
                B9EA4E0A25C7E7AB000FFDA2 /* MJRefreshConst.m */,
                B9EA4E0B25C7E7AB000FFDA2 /* UIScrollView+MJExtension.h */,
                B9EA4E0C25C7E7AB000FFDA2 /* MJRefresh.h */,
                B9EA4E0D25C7E7AB000FFDA2 /* NSBundle+MJRefresh.h */,
                B9EA4E0E25C7E7AB000FFDA2 /* MJRefresh.bundle */,
                B9EA4E0F25C7E7AB000FFDA2 /* UIView+MJExtension.h */,
                B9EA4E1025C7E7AB000FFDA2 /* UIScrollView+MJExtension.m */,
                B9EA4E1125C7E7AB000FFDA2 /* MJRefreshConst.h */,
                B9EA4E1225C7E7AB000FFDA2 /* UIScrollView+MJRefresh.h */,
                B9EA4E1325C7E7AB000FFDA2 /* NSBundle+MJRefresh.m */,
                B9EA4E1425C7E7AB000FFDA2 /* UIView+MJExtension.m */,
                B9EA4E1525C7E7AB000FFDA2 /* Custom */,
                B9EA4E2C25C7E7AB000FFDA2 /* Base */,
            );
            path = MJRefresh;
            sourceTree = "<group>";
        };
        B9EA4E1525C7E7AB000FFDA2 /* Custom */ = {
            isa = PBXGroup;
            children = (
                B9EA4E1625C7E7AB000FFDA2 /* Footer */,
                B9EA4E2525C7E7AB000FFDA2 /* Header */,
            );
            path = Custom;
            sourceTree = "<group>";
        };
        B9EA4E1625C7E7AB000FFDA2 /* Footer */ = {
            isa = PBXGroup;
            children = (
                B9EA4E1725C7E7AB000FFDA2 /* Back */,
                B9EA4E1E25C7E7AB000FFDA2 /* Auto */,
            );
            path = Footer;
            sourceTree = "<group>";
        };
        B9EA4E1725C7E7AB000FFDA2 /* Back */ = {
            isa = PBXGroup;
            children = (
                B9EA4E1825C7E7AB000FFDA2 /* MJRefreshBackGifFooter.h */,
                B9EA4E1925C7E7AB000FFDA2 /* MJRefreshBackStateFooter.h */,
                B9EA4E1A25C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.h */,
                B9EA4E1B25C7E7AB000FFDA2 /* MJRefreshBackGifFooter.m */,
                B9EA4E1C25C7E7AB000FFDA2 /* MJRefreshBackStateFooter.m */,
                B9EA4E1D25C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.m */,
            );
            path = Back;
            sourceTree = "<group>";
        };
        B9EA4E1E25C7E7AB000FFDA2 /* Auto */ = {
            isa = PBXGroup;
            children = (
                B9EA4E1F25C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.h */,
                B9EA4E2025C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.h */,
                B9EA4E2125C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.h */,
                B9EA4E2225C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.m */,
                B9EA4E2325C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.m */,
                B9EA4E2425C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.m */,
            );
            path = Auto;
            sourceTree = "<group>";
        };
        B9EA4E2525C7E7AB000FFDA2 /* Header */ = {
            isa = PBXGroup;
            children = (
                B9EA4E2625C7E7AB000FFDA2 /* MJRefreshNormalHeader.m */,
                B9EA4E2725C7E7AB000FFDA2 /* MJRefreshStateHeader.h */,
                B9EA4E2825C7E7AB000FFDA2 /* MJRefreshGifHeader.h */,
                B9EA4E2925C7E7AB000FFDA2 /* MJRefreshNormalHeader.h */,
                B9EA4E2A25C7E7AB000FFDA2 /* MJRefreshStateHeader.m */,
                B9EA4E2B25C7E7AB000FFDA2 /* MJRefreshGifHeader.m */,
            );
            path = Header;
            sourceTree = "<group>";
        };
        B9EA4E2C25C7E7AB000FFDA2 /* Base */ = {
            isa = PBXGroup;
            children = (
                B9EA4E2D25C7E7AB000FFDA2 /* MJRefreshFooter.m */,
                B9EA4E2E25C7E7AB000FFDA2 /* MJRefreshComponent.h */,
                B9EA4E2F25C7E7AB000FFDA2 /* MJRefreshHeader.m */,
                B9EA4E3025C7E7AB000FFDA2 /* MJRefreshAutoFooter.h */,
                B9EA4E3125C7E7AB000FFDA2 /* MJRefreshBackFooter.m */,
                B9EA4E3225C7E7AB000FFDA2 /* MJRefreshAutoFooter.m */,
                B9EA4E3325C7E7AB000FFDA2 /* MJRefreshHeader.h */,
                B9EA4E3425C7E7AB000FFDA2 /* MJRefreshComponent.m */,
                B9EA4E3525C7E7AB000FFDA2 /* MJRefreshFooter.h */,
                B9EA4E3625C7E7AB000FFDA2 /* MJRefreshBackFooter.h */,
            );
            path = Base;
            sourceTree = "<group>";
        };
        C484622D241789AD0003F8C4 /* Views */ = {
            isa = PBXGroup;
            children = (
@@ -1576,9 +1595,11 @@
                B95004F125B927D0002D3C58 /* com.hri.hpc.mobile.ios.player.metallib in Resources */,
                4975E88E1F60E44500A00CDF /* Localizable.strings in Resources */,
                0D8CF37C1BDF1ABA00A50266 /* Assets.xcassets in Resources */,
                B9EA4E3825C7E7AB000FFDA2 /* LICENSE in Resources */,
                0D5FCB791BE0EC8E004E5734 /* AddDevice.storyboard in Resources */,
                B9EA4E4D25C7E7AB000FFDA2 /* README.md in Resources */,
                C49DA95D21E450250078FFD0 /* EZSupportViewController.xib in Resources */,
                0D8CF3E51BDF516700A50266 /* MJRefresh.bundle in Resources */,
                B9EA4E3B25C7E7AB000FFDA2 /* MJRefresh.bundle in Resources */,
                0D8CF37A1BDF1ABA00A50266 /* EZMain.storyboard in Resources */,
                B95004F725B929EF002D3C58 /* Launch Screen.storyboard in Resources */,
                C4A41D8423D6EE5F00D59722 /* EZVideoTalkViewcontroller.xib in Resources */,
@@ -1612,23 +1633,18 @@
                0DF582BE1BE84E1400242E99 /* EZRecordCell.m in Sources */,
                0D9ACAEC1C7EE4D100B4DE97 /* UIRefreshControl+AFNetworking.m in Sources */,
                0DCE0C011BE22761000EA68A /* NSArray+DDKit.m in Sources */,
                0D8CF3DD1BDF516700A50266 /* MJRefreshAutoNormalFooter.m in Sources */,
                0D8CF4DD1BDF898800A50266 /* UITableView+FDTemplateLayoutCellDebug.m in Sources */,
                0DCE0BE51BE20571000EA68A /* EZQRView.m in Sources */,
                0D8CF3E01BDF516700A50266 /* MJRefreshBackNormalFooter.m in Sources */,
                0D8CF3D81BDF516700A50266 /* MJRefreshBackFooter.m in Sources */,
                0D9ACAE81C7EE4D100B4DE97 /* UIAlertView+AFNetworking.m in Sources */,
                B9EA4E4A25C7E7AB000FFDA2 /* MJRefreshBackFooter.m in Sources */,
                0DCE0C381BE2279F000EA68A /* UIButton+WebCache.m in Sources */,
                0DCE0C351BE2279F000EA68A /* SDWebImageDownloaderOperation.m in Sources */,
                0D9ACAE61C7EE4D100B4DE97 /* AFNetworkActivityIndicatorManager.m in Sources */,
                0DCE0BCB1BE1C9A9000EA68A /* MASCompositeConstraint.m in Sources */,
                0DCE0BCF1BE1C9A9000EA68A /* MASViewAttribute.m in Sources */,
                0D8CF3E61BDF516700A50266 /* MJRefreshConst.m in Sources */,
                0D8CF3E71BDF516700A50266 /* UIScrollView+MJExtension.m in Sources */,
                0DD500081BFC647100A9629C /* UIImageView+EzvizOpenSDK.m in Sources */,
                0D8CF3DA1BDF516700A50266 /* MJRefreshFooter.m in Sources */,
                B9EA4E4B25C7E7AB000FFDA2 /* MJRefreshAutoFooter.m in Sources */,
                0DCE0BCC1BE1C9A9000EA68A /* MASConstraint.m in Sources */,
                0D8CF3E21BDF516700A50266 /* MJRefreshGifHeader.m in Sources */,
                C48E4B4723331F7C00F57F6D /* EZLocationAlertVCViewController.m in Sources */,
                0DCE0C3A1BE2279F000EA68A /* UIImage+MultiFormat.m in Sources */,
                0DCE0BD81BE1CB74000EA68A /* EZWifiInfoViewController.m in Sources */,
@@ -1639,24 +1655,23 @@
                0D50150F1BF8B77500F13269 /* MWTapDetectingImageView.m in Sources */,
                49AF550A1F442A1E007362EA /* EZLocalRealPlayViewController.m in Sources */,
                0DCE0BAE1BE1C975000EA68A /* EZWifiTipsViewController.m in Sources */,
                0D8CF3D71BDF516700A50266 /* MJRefreshAutoFooter.m in Sources */,
                0D2E4BB41C7DB2E200CA948A /* AFURLResponseSerialization.m in Sources */,
                0DCE0BD11BE1C9A9000EA68A /* NSArray+MASAdditions.m in Sources */,
                0D8CF3771BDF1ABA00A50266 /* ViewController.m in Sources */,
                0D50151C1BF8BC7900F13269 /* EZMessagePlaybackViewController.m in Sources */,
                0DCE0C3E1BE2279F000EA68A /* UIView+WebCacheOperation.m in Sources */,
                0D8CF3E91BDF516700A50266 /* UIView+MJExtension.m in Sources */,
                0DCE0C021BE22761000EA68A /* NSDate+DDKit.m in Sources */,
                0DCF6CF61BE8961A004B180A /* MessageListCell.m in Sources */,
                0DCE0C091BE22761000EA68A /* UISegmentedControl+DDKit.m in Sources */,
                0D5FCB7C1BE0EF32004E5734 /* EZAddByQRCodeViewController.m in Sources */,
                B9EA4E3C25C7E7AB000FFDA2 /* UIScrollView+MJExtension.m in Sources */,
                0D0C43D51BE72C2500039D44 /* Aspects.m in Sources */,
                49D4B40D1F66A44000ADF471 /* EZDdnsDeviceTableViewController.m in Sources */,
                B9EA4E4625C7E7AB000FFDA2 /* MJRefreshStateHeader.m in Sources */,
                C48462262417883B0003F8C4 /* UIAlertController+TextField.m in Sources */,
                0D8CF3DB1BDF516700A50266 /* MJRefreshHeader.m in Sources */,
                0D8CF3DF1BDF516700A50266 /* MJRefreshBackGifFooter.m in Sources */,
                0DFC6AE71BF20C87005FACFE /* EZSettingViewController.m in Sources */,
                0D50150E1BF8B77500F13269 /* MWPhotoBrowser.m in Sources */,
                B9EA4E4425C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.m in Sources */,
                C49DA95E21E450250078FFD0 /* EZSupportViewController.m in Sources */,
                0DCE0C301BE2279F000EA68A /* NSData+ImageContentType.m in Sources */,
                0D2E4BB01C7DB2E200CA948A /* AFNetworkReachabilityManager.m in Sources */,
@@ -1668,7 +1683,6 @@
                C480646B22C45CFD003C9607 /* EZCustomTableView.m in Sources */,
                0D9ACAE91C7EE4D100B4DE97 /* UIButton+AFNetworking.m in Sources */,
                C484622C2417899F0003F8C4 /* EZEncryptCameraCell.m in Sources */,
                0D8CF3E81BDF516700A50266 /* UIScrollView+MJRefresh.m in Sources */,
                496D11381DF9832F00468C51 /* Toast+UIView.m in Sources */,
                0D9ACAE71C7EE4D100B4DE97 /* UIActivityIndicatorView+AFNetworking.m in Sources */,
                0DCE0C071BE22761000EA68A /* UIImageView+DDKit.m in Sources */,
@@ -1676,22 +1690,25 @@
                0D5FCB7F1BE0EFAA004E5734 /* EZDeviceTableViewController.m in Sources */,
                0D2E4BB31C7DB2E200CA948A /* AFURLRequestSerialization.m in Sources */,
                492E5B4220C69FA600D333EE /* EZAPConfigResultViewController.m in Sources */,
                B9EA4E3D25C7E7AB000FFDA2 /* NSBundle+MJRefresh.m in Sources */,
                0DC582D21BFF006B00D5BF02 /* NSDate-Utilities.m in Sources */,
                0DCFC11E1BF18DD800EE1FA3 /* HIKLoadViewItem+configPath.m in Sources */,
                49AF550D1F44423B007362EA /* EZLocalCameraListViewController.m in Sources */,
                C437D74524723C1A0012D982 /* EZHubDebugViewController.m in Sources */,
                0D8CF4D01BDF696900A50266 /* GlobalKit.m in Sources */,
                0D8CF3D91BDF516700A50266 /* MJRefreshComponent.m in Sources */,
                0DF582B71BE83F1A00242E99 /* EZPlaybackViewController.m in Sources */,
                492E5B3F20C531AD00D333EE /* EZAPWiFiConfigViewController.m in Sources */,
                0D120D8F1C2158B7008B585B /* EZEditViewController.m in Sources */,
                0D6CD2821BF9FF2500F82B7F /* EZMessagePhotoViewController.m in Sources */,
                B9EA4E4125C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.m in Sources */,
                B9EA4E4725C7E7AB000FFDA2 /* MJRefreshGifHeader.m in Sources */,
                49AF55051F43EA18007362EA /* EZLocalDeviceListViewController.m in Sources */,
                0D6570711C2AABC900D76123 /* EZDeviceUpgradeViewController.m in Sources */,
                B9EA4E4225C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.m in Sources */,
                0D0C43DC1BE7407200039D44 /* UINavigationController+EZOpenSDK.m in Sources */,
                0DCE0C361BE2279F000EA68A /* SDWebImageManager.m in Sources */,
                B9EA4E4325C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.m in Sources */,
                0DCE0C041BE22761000EA68A /* UIButton+DDKit.m in Sources */,
                0D8CF3DE1BDF516700A50266 /* MJRefreshAutoStateFooter.m in Sources */,
                C4A41D8223D6E7B200D59722 /* EZVideoTalkViewcontroller.mm in Sources */,
                0DCFC11B1BF18DD800EE1FA3 /* HIKLoadPercentView.m in Sources */,
                0D2E4BAE1C7DB2E200CA948A /* AFHTTPRequestOperationManager.m in Sources */,
@@ -1706,29 +1723,30 @@
                0D8CF4DA1BDF898800A50266 /* UITableView+FDIndexPathHeightCache.m in Sources */,
                0DCE0C081BE22761000EA68A /* UILabel+DDKit.m in Sources */,
                0D5015121BF8B77500F13269 /* UIImage+MWPhotoBrowser.m in Sources */,
                0D8CF3E31BDF516700A50266 /* MJRefreshNormalHeader.m in Sources */,
                0D90A06B1CABC6A100E78C64 /* EZPlayDemoViewController.m in Sources */,
                0DCE0C3C1BE2279F000EA68A /* UIImageView+HighlightedWebCache.m in Sources */,
                B9EA4E3925C7E7AB000FFDA2 /* UIScrollView+MJRefresh.m in Sources */,
                0D77A3361BE0F38D00B4AD0A /* EZDeviceResultViewController.m in Sources */,
                0D5015191BF8B7FF00F13269 /* DALabeledCircularProgressView.m in Sources */,
                0D50150C1BF8B77500F13269 /* MWGridViewController.m in Sources */,
                0DCE0C0B1BE22761000EA68A /* UIViewController+DDKit.m in Sources */,
                0D77A3331BE0F30000B4AD0A /* EZLivePlayViewController.m in Sources */,
                0D8CF3E41BDF516700A50266 /* MJRefreshStateHeader.m in Sources */,
                0D2E4BB11C7DB2E200CA948A /* AFSecurityPolicy.m in Sources */,
                0D9ACAEA1C7EE4D100B4DE97 /* UIImageView+AFNetworking.m in Sources */,
                0DCE0BD01BE1C9A9000EA68A /* MASViewConstraint.m in Sources */,
                0D5015111BF8B77500F13269 /* MWZoomingScrollView.m in Sources */,
                B9EA4E3E25C7E7AB000FFDA2 /* UIView+MJExtension.m in Sources */,
                0D50150A1BF8B77500F13269 /* MWCaptionView.m in Sources */,
                0D5015101BF8B77500F13269 /* MWTapDetectingView.m in Sources */,
                0D8CF3E11BDF516700A50266 /* MJRefreshBackStateFooter.m in Sources */,
                0D50150D1BF8B77500F13269 /* MWPhoto.m in Sources */,
                0DCE0BAB1BE1C1EE000EA68A /* EZDeviceRestartTipsViewController.m in Sources */,
                0DCE0C331BE2279F000EA68A /* SDWebImageDecoder.m in Sources */,
                0D7877B41C048C6300286888 /* DemoAPITableViewController.m in Sources */,
                0DCE0BCD1BE1C9A9000EA68A /* MASConstraintMaker.m in Sources */,
                0D8CF4DB1BDF898800A50266 /* UITableView+FDKeyedHeightCache.m in Sources */,
                B9EA4E4925C7E7AB000FFDA2 /* MJRefreshHeader.m in Sources */,
                0D4815561D911AE50003993C /* EZCameraTableViewController.m in Sources */,
                B9EA4E4525C7E7AB000FFDA2 /* MJRefreshNormalHeader.m in Sources */,
                0DCFC11C1BF18DD800EE1FA3 /* HIKLoadView.m in Sources */,
                0DCE0BD41BE1C9A9000EA68A /* ViewController+MASAdditions.m in Sources */,
                0DCE0C031BE22761000EA68A /* NSString+DDKit.m in Sources */,
@@ -1738,13 +1756,17 @@
                0D0C43D81BE72F5400039D44 /* UIViewController+EZBackPop.m in Sources */,
                0DCE0C3B1BE2279F000EA68A /* UIImage+WebP.m in Sources */,
                0D2E4BAF1C7DB2E200CA948A /* AFHTTPSessionManager.m in Sources */,
                0D8CF3DC1BDF516700A50266 /* MJRefreshAutoGifFooter.m in Sources */,
                0DCE0BDB1BE1F17B000EA68A /* EZWifiConfigViewController.m in Sources */,
                C4846229241789750003F8C4 /* EZOfflineCameraCell.m in Sources */,
                0DCE0C061BE22761000EA68A /* UIImage+DDKit.m in Sources */,
                C484622324176DFD0003F8C4 /* EZOnlineCameraCell.m in Sources */,
                B9EA4E4825C7E7AB000FFDA2 /* MJRefreshFooter.m in Sources */,
                B9EA4E3F25C7E7AB000FFDA2 /* MJRefreshBackGifFooter.m in Sources */,
                0D5015181BF8B7FF00F13269 /* DACircularProgressView.m in Sources */,
                B9EA4E4025C7E7AB000FFDA2 /* MJRefreshBackStateFooter.m in Sources */,
                0DCE0C0A1BE22761000EA68A /* UIView+DDKit.m in Sources */,
                B9EA4E4C25C7E7AB000FFDA2 /* MJRefreshComponent.m in Sources */,
                B9EA4E3A25C7E7AB000FFDA2 /* MJRefreshConst.m in Sources */,
                0D8CF3741BDF1ABA00A50266 /* AppDelegate.m in Sources */,
                0D8CF3711BDF1ABA00A50266 /* main.m in Sources */,
                0DF582BB1BE84AA600242E99 /* DDCollectionViewFlowLayout.m in Sources */,
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/AppDelegate.m
@@ -30,9 +30,9 @@
    
//    [EZOPENSDK initLibWithAppKey:@"0311c3f70a854aacb5a099f2bfbef986"];
    [EZOPENSDK initLibWithAppKey:@"1aa98a90489b4838b966b57018b4b04b"];
//    NSLog(@"LanguageIsChinese :%s", LanguageIsChinese ? "YES":"NO");
//    NSLog(@"NSStringFromClass :%@", NSStringFromClass(EZOPENSDK));
    [EZHCNetDeviceSDK initSDK];
    [EZOPENSDK enableP2P:YES];
    
    NSLog(@"EZOpenSDK Version = %@", [EZOPENSDK getVersion]);
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/AddDevice.storyboard
@@ -45,7 +45,7 @@
                                            <constraint firstAttribute="width" constant="220" id="z1o-th-eJT"/>
                                        </constraints>
                                    </imageView>
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SAq-8X-VZA">
                                    <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SAq-8X-VZA">
                                        <rect key="frame" x="22" y="566" width="64" height="30"/>
                                        <constraints>
                                            <constraint firstAttribute="width" constant="64" id="0id-Ux-Cgq"/>
@@ -912,7 +912,7 @@
    <inferredMetricsTieBreakers>
        <segue reference="9TP-S2-hhI"/>
        <segue reference="MFl-yy-ZsP"/>
        <segue reference="ikM-Zn-H8f"/>
        <segue reference="VYk-37-nb6"/>
    </inferredMetricsTieBreakers>
    <resources>
        <image name="addDevice_success" width="320" height="185"/>
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/EZMain.storyboard
@@ -1196,14 +1196,14 @@
                                            <action selector="localButtonClicked:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="ghH-Hn-KkG"/>
                                        </connections>
                                    </button>
                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WYB-ca-Ox6">
                                    <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WYB-ca-Ox6">
                                        <rect key="frame" x="323" y="20" width="32" height="32"/>
                                        <state key="normal" image="cloud"/>
                                        <connections>
                                            <action selector="clickCloudBtn:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="Ft8-PW-PT5"/>
                                        </connections>
                                    </button>
                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="云存储" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wXb-RI-dLd">
                                    <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="云存储" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wXb-RI-dLd">
                                        <rect key="frame" x="319" y="52" width="40" height="16"/>
                                        <fontDescription key="fontDescription" type="system" pointSize="13"/>
                                        <color key="textColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@@ -2486,6 +2486,7 @@
        <segue reference="q2I-Q5-CUY"/>
        <segue reference="vdt-wN-aOY"/>
    </inferredMetricsTieBreakers>
    <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
    <resources>
        <image name="StreamStudio" width="24" height="24"/>
        <image name="StreamStudio-2" width="24" height="24"/>
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/Localizable.strings
@@ -104,7 +104,7 @@
"wifi_add_device_title"="Step 3, add device.";
"wifi_connecting_net"="Connecting to Wi-Fi. Please wait.";
"wifi_register_server"="Register Server";
"wifi_bind_account"="绑定你的账户";
"wifi_bind_account"="Bind your account";
"wifi_already_configed"="The Wi-Fi is configured.";
"wifi_registering_server"="Registering the server.";
"wifi_bind_account_result"="Link to your account to finish.";
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/GlobalKit.h
@@ -8,22 +8,13 @@
#import <Foundation/Foundation.h>
#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0])
#define LanguageIsChinese ([CURR_LANG rangeOfString:@"zh-Hans"].location != NSNotFound)
//#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0])
//#define LanguageIsChinese ([CURR_LANG rangeOfString:@"zh-Hans"].location != NSNotFound)
////中文走国内, 不是中文走海外
#define EZOPENSDK LanguageIsChinese ? [EZOpenSDK class] : [EZGlobalSDK class]
//中文走国内, 不是中文走海外
#ifdef LanguageIsChinese
#define EZOPENSDK [EZOpenSDK class]
#else
#define EZOPENSDK [EZGlobalSDK class]
#endif
//2021-02-01 不考虑海外先
#define LanguageIsChinese true
@interface GlobalKit : NSObject
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/TableViewCells/DeviceListCell.m
@@ -41,6 +41,7 @@
//            [self.cameraImageView sd_setImageWithURL:[NSURL URLWithString:url]];
//        }
//    }];
//    [EZOPENSDK cap]
    
    self.messageButton.hidden = NO;
    self.settingButton.hidden = NO;
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZDeviceTableViewController.m
@@ -105,12 +105,12 @@
                //            self.navigationItem.rightBarButtonItem = self.addButton;
            }];
        }else{
            [EZOPENSDK getAreaList:^(NSArray *areaList, NSError *error) {
            [[EZGlobalSDK class] getAreaList:^(NSArray *areaList, NSError *error) {
                EZAreaInfo *areaInfo = areaList.firstObject;
                [EZOPENSDK openLoginPage:[NSString stringWithFormat:@"%ld",(long)areaInfo.id]
                [[EZGlobalSDK class] openLoginPage:[NSString stringWithFormat:@"%ld",(long)areaInfo.id]
                              completion:^(EZAccessToken *accessToken) {
                    [[GlobalKit shareKit] setAccessToken:accessToken.accessToken];
                    [EZOPENSDK setAccessToken:accessToken.accessToken];
                    [[EZGlobalSDK class] setAccessToken:accessToken.accessToken];
                    [self addRefreshKit];
                    //                                            self.navigationItem.rightBarButtonItem = self.addButton;
                }];
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZEditViewController.m
@@ -23,8 +23,7 @@
    // Do any additional setup after loading the view.
    
    self.title = NSLocalizedString(@"device_modify_name_title", @"修改设备名称");
//    self.deviceNameTextField.text = self.cameraInfo.deviceName;
    self.deviceNameTextField.text = self.deviceInfo.deviceName;
//    
//    self.deviceNameTextField.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 30)];
//    self.deviceNameTextField.leftViewMode = UITextFieldViewModeAlways;
@@ -91,7 +90,7 @@
                      NSLog(@"error = %@",error);
                      if(!error)
                      {
//                          self.cameraInfo.deviceName = self.deviceNameTextField.text;
                          self.deviceInfo.deviceName = self.deviceNameTextField.text;
                          [self.navigationController popViewControllerAnimated:YES];
                      }
                  }];
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZPlaybackViewController.m
@@ -559,7 +559,7 @@
        
        NSLog(@"GetStreamFetchType:%d", [self.player getStreamFetchType]);
        
        [self showStreamFetchType];
//        [self showStreamFetchType];
    }
    else if (messageCode == PLAYER_PLAYBACK_STOP)
    {
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZSettingViewController.m
@@ -186,7 +186,7 @@
            make.centerY.mas_equalTo(cell.contentView.mas_centerY);
            make.height.mas_equalTo(@20);
        }];
//        self.nameLabel.text = self.cameraInfo.deviceName;
        self.nameLabel.text = self.deviceInfo.deviceName;
    }
    else if (indexPath.section == 1)
    {
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.m
File was deleted
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/LICENSE
New file
@@ -0,0 +1,19 @@
Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.h
@@ -13,8 +13,11 @@
@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用automaticallyChangeAlpha属性");
@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用triggerAutomaticallyRefreshPercent属性");
/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
/** 是否每一次拖拽只发一次请求 */
@property (assign, nonatomic, getter=isOnlyRefreshPerDrag) BOOL onlyRefreshPerDrag;
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.m
@@ -9,6 +9,8 @@
#import "MJRefreshAutoFooter.h"
@interface MJRefreshAutoFooter()
/** 一个新的拖拽 */
@property (assign, nonatomic, getter=isOneNewPan) BOOL oneNewPan;
@end
@implementation MJRefreshAutoFooter
@@ -53,6 +55,9 @@
    
    // 设置为默认状态
    self.automaticallyRefresh = YES;
    // 默认是当offset达到条件就发送请求(可连续)
    self.onlyRefreshPerDrag = NO;
}
- (void)scrollViewContentSizeDidChange:(NSDictionary *)change
@@ -89,7 +94,8 @@
    
    if (self.state != MJRefreshStateIdle) return;
    
    if (_scrollView.panGestureRecognizer.state == UIGestureRecognizerStateEnded) {// 手松开
    UIGestureRecognizerState panState = _scrollView.panGestureRecognizer.state;
    if (panState == UIGestureRecognizerStateEnded) {// 手松开
        if (_scrollView.mj_insetT + _scrollView.mj_contentH <= _scrollView.mj_h) {  // 不够一个屏幕
            if (_scrollView.mj_offsetY >= - _scrollView.mj_insetT) { // 向上拽
                [self beginRefreshing];
@@ -99,7 +105,18 @@
                [self beginRefreshing];
            }
        }
    } else if (panState == UIGestureRecognizerStateBegan) {
        self.oneNewPan = YES;
    }
}
- (void)beginRefreshing
{
    if (!self.isOneNewPan && self.isOnlyRefreshPerDrag) return;
    [super beginRefreshing];
    self.oneNewPan = NO;
}
- (void)setState:(MJRefreshState)state
@@ -107,9 +124,13 @@
    MJRefreshCheckState
    
    if (state == MJRefreshStateRefreshing) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self executeRefreshingCallback];
        });
        [self executeRefreshingCallback];
    } else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) {
        if (MJRefreshStateRefreshing == oldState) {
            if (self.endRefreshingCompletionBlock) {
                self.endRefreshingCompletionBlock();
            }
        }
    }
}
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshBackFooter.m
@@ -31,7 +31,7 @@
    // 如果正在刷新,直接返回
    if (self.state == MJRefreshStateRefreshing) return;
    
    _scrollViewOriginalInset = self.scrollView.contentInset;
    _scrollViewOriginalInset = self.scrollView.mj_inset;
    
    // 当前的contentOffset
    CGFloat currentOffsetY = self.scrollView.mj_offsetY;
@@ -95,17 +95,21 @@
                if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0;
            } completion:^(BOOL finished) {
                self.pullingPercent = 0.0;
                if (self.endRefreshingCompletionBlock) {
                    self.endRefreshingCompletionBlock();
                }
            }];
        }
        
        CGFloat deltaH = [self heightForContentBreakView];
        // 刚刷新完毕
        if (MJRefreshStateRefreshing == oldState && deltaH > 0 && self.scrollView.totalDataCount != self.lastRefreshCount) {
        if (MJRefreshStateRefreshing == oldState && deltaH > 0 && self.scrollView.mj_totalDataCount != self.lastRefreshCount) {
            self.scrollView.mj_offsetY = self.scrollView.mj_offsetY;
        }
    } else if (state == MJRefreshStateRefreshing) {
        // 记录刷新前的数量
        self.lastRefreshCount = self.scrollView.totalDataCount;
        self.lastRefreshCount = self.scrollView.mj_totalDataCount;
        
        [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
            CGFloat bottom = self.mj_h + self.scrollViewOriginalInset.bottom;
@@ -121,30 +125,6 @@
        }];
    }
}
#pragma mark - 公共方法
- (void)endRefreshing
{
    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [super endRefreshing];
        });
    } else {
        [super endRefreshing];
    }
}
- (void)noticeNoMoreData
{
    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [super noticeNoMoreData];
        });
    } else {
        [super noticeNoMoreData];
    }
}
#pragma mark - 私有方法
#pragma mark 获得scrollView的内容 超出 view 的高度
- (CGFloat)heightForContentBreakView
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.h
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.h
@@ -12,9 +12,10 @@
#import "UIView+MJExtension.h"
#import "UIScrollView+MJExtension.h"
#import "UIScrollView+MJRefresh.h"
#import "NSBundle+MJRefresh.h"
/** 刷新控件的状态 */
typedef enum {
typedef NS_ENUM(NSInteger, MJRefreshState) {
    /** 普通闲置状态 */
    MJRefreshStateIdle = 1,
    /** 松开就可以进行刷新的状态 */
@@ -25,10 +26,14 @@
    MJRefreshStateWillRefresh,
    /** 所有数据加载完毕,没有更多的数据了 */
    MJRefreshStateNoMoreData
} MJRefreshState;
};
/** 进入刷新状态的回调 */
typedef void (^MJRefreshComponentRefreshingBlock)();
typedef void (^MJRefreshComponentRefreshingBlock)(void);
/** 开始刷新后的回调(进入刷新状态后的回调) */
typedef void (^MJRefreshComponentbeginRefreshingCompletionBlock)(void);
/** 结束刷新后的回调 */
typedef void (^MJRefreshComponentEndRefreshingCompletionBlock)(void);
/** 刷新控件的基类 */
@interface MJRefreshComponent : UIView
@@ -43,6 +48,7 @@
@property (copy, nonatomic) MJRefreshComponentRefreshingBlock refreshingBlock;
/** 设置回调对象和回调方法 */
- (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action;
/** 回调对象 */
@property (weak, nonatomic) id refreshingTarget;
/** 回调方法 */
@@ -53,10 +59,17 @@
#pragma mark - 刷新状态控制
/** 进入刷新状态 */
- (void)beginRefreshing;
- (void)beginRefreshingWithCompletionBlock:(void (^)(void))completionBlock;
/** 开始刷新后的回调(进入刷新状态后的回调) */
@property (copy, nonatomic) MJRefreshComponentbeginRefreshingCompletionBlock beginRefreshingCompletionBlock;
/** 结束刷新的回调 */
@property (copy, nonatomic) MJRefreshComponentEndRefreshingCompletionBlock endRefreshingCompletionBlock;
/** 结束刷新状态 */
- (void)endRefreshing;
- (void)endRefreshingWithCompletionBlock:(void (^)(void))completionBlock;
/** 是否正在刷新 */
- (BOOL)isRefreshing;
@property (assign, nonatomic, readonly, getter=isRefreshing) BOOL refreshing;
//- (BOOL)isRefreshing;
/** 刷新状态 一般交给子类内部实现 */
@property (assign, nonatomic) MJRefreshState state;
@@ -89,5 +102,6 @@
@end
@interface UILabel(MJRefresh)
+ (instancetype)label;
+ (instancetype)mj_label;
- (CGFloat)mj_textWith;
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.m
@@ -9,8 +9,6 @@
#import "MJRefreshComponent.h"
#import "MJRefreshConst.h"
#import "UIView+MJExtension.h"
#import "UIScrollView+MJRefresh.h"
@interface MJRefreshComponent()
@property (strong, nonatomic) UIPanGestureRecognizer *pan;
@@ -39,9 +37,9 @@
- (void)layoutSubviews
{
    [super layoutSubviews];
    [self placeSubviews];
    [super layoutSubviews];
}
- (void)placeSubviews{}
@@ -60,14 +58,14 @@
        // 设置宽度
        self.mj_w = newSuperview.mj_w;
        // 设置位置
        self.mj_x = 0;
        self.mj_x = -_scrollView.mj_insetL;
        
        // 记录UIScrollView
        _scrollView = (UIScrollView *)newSuperview;
        // 设置永远支持垂直弹簧效果
        _scrollView.alwaysBounceVertical = YES;
        // 记录UIScrollView最开始的contentInset
        _scrollViewOriginalInset = _scrollView.contentInset;
        _scrollViewOriginalInset = _scrollView.mj_inset;
        
        // 添加监听
        [self addObservers];
@@ -97,7 +95,7 @@
- (void)removeObservers
{
    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentOffset];
    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize];;
    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize];
    [self.pan removeObserver:self forKeyPath:MJRefreshKeyPathPanState];
    self.pan = nil;
}
@@ -133,6 +131,16 @@
    self.refreshingAction = action;
}
- (void)setState:(MJRefreshState)state
{
    _state = state;
    // 加入主队列的目的是等setState:方法调用完毕、设置完文字后再去布局子控件
    dispatch_async(dispatch_get_main_queue(), ^{
        [self setNeedsLayout];
    });
}
#pragma mark 进入刷新状态
- (void)beginRefreshing
{
@@ -144,16 +152,35 @@
    if (self.window) {
        self.state = MJRefreshStateRefreshing;
    } else {
        self.state = MJRefreshStateWillRefresh;
        // 刷新(预防从另一个控制器回到这个控制器的情况,回来要重新刷新一下)
        [self setNeedsDisplay];
        // 预防正在刷新中时,调用本方法使得header inset回置失败
        if (self.state != MJRefreshStateRefreshing) {
            self.state = MJRefreshStateWillRefresh;
            // 刷新(预防从另一个控制器回到这个控制器的情况,回来要重新刷新一下)
            [self setNeedsDisplay];
        }
    }
}
- (void)beginRefreshingWithCompletionBlock:(void (^)(void))completionBlock
{
    self.beginRefreshingCompletionBlock = completionBlock;
    [self beginRefreshing];
}
#pragma mark 结束刷新状态
- (void)endRefreshing
{
    self.state = MJRefreshStateIdle;
    dispatch_async(dispatch_get_main_queue(), ^{
        self.state = MJRefreshStateIdle;
    });
}
- (void)endRefreshingWithCompletionBlock:(void (^)(void))completionBlock
{
    self.endRefreshingCompletionBlock = completionBlock;
    [self endRefreshing];
}
#pragma mark 是否正在刷新
@@ -208,12 +235,15 @@
        if ([self.refreshingTarget respondsToSelector:self.refreshingAction]) {
            MJRefreshMsgSend(MJRefreshMsgTarget(self.refreshingTarget), self.refreshingAction, self);
        }
        if (self.beginRefreshingCompletionBlock) {
            self.beginRefreshingCompletionBlock();
        }
    });
}
@end
@implementation UILabel(MJRefresh)
+ (instancetype)label
+ (instancetype)mj_label
{
    UILabel *label = [[self alloc] init];
    label.font = MJRefreshLabelFont;
@@ -223,4 +253,24 @@
    label.backgroundColor = [UIColor clearColor];
    return label;
}
@end
- (CGFloat)mj_textWith {
    CGFloat stringWidth = 0;
    CGSize size = CGSizeMake(MAXFLOAT, MAXFLOAT);
    if (self.text.length > 0) {
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
        stringWidth =[self.text
                      boundingRectWithSize:size
                      options:NSStringDrawingUsesLineFragmentOrigin
                      attributes:@{NSFontAttributeName:self.font}
                      context:nil].size.width;
#else
        stringWidth = [self.text sizeWithFont:self.font
                             constrainedToSize:size
                                 lineBreakMode:NSLineBreakByCharWrapping].width;
#endif
    }
    return stringWidth;
}
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.h
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.h
@@ -25,6 +25,6 @@
/** 忽略多少scrollView的contentInset的bottom */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom;
/** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏) */
@property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden;
/** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏。默认是NO) */
@property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden MJRefreshDeprecated("不建议使用此属性,开发者请自行控制footer的显示和隐藏。基于安全考虑,在未来的某些版本此属性可能作废");
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.m
@@ -8,6 +8,7 @@
//
#import "MJRefreshFooter.h"
#include "UIScrollView+MJRefresh.h"
@interface MJRefreshFooter()
@@ -36,8 +37,8 @@
    // 设置自己的高度
    self.mj_h = MJRefreshFooterHeight;
    
    // 默认是自动隐藏
    self.automaticallyHidden = YES;
    // 默认不会自动隐藏
    self.automaticallyHidden = NO;
}
- (void)willMoveToSuperview:(UIView *)newSuperview
@@ -47,7 +48,7 @@
    if (newSuperview) {
        // 监听scrollView数据的变化
        if ([self.scrollView isKindOfClass:[UITableView class]] || [self.scrollView isKindOfClass:[UICollectionView class]]) {
            [self.scrollView setReloadDataBlock:^(NSInteger totalDataCount) {
            [self.scrollView setMj_reloadDataBlock:^(NSInteger totalDataCount) {
                if (self.isAutomaticallyHidden) {
                    self.hidden = (totalDataCount == 0);
                }
@@ -59,7 +60,9 @@
#pragma mark - 公共方法
- (void)endRefreshingWithNoMoreData
{
    self.state = MJRefreshStateNoMoreData;
    dispatch_async(dispatch_get_main_queue(), ^{
        self.state = MJRefreshStateNoMoreData;
    });
}
- (void)noticeNoMoreData
@@ -69,6 +72,13 @@
- (void)resetNoMoreData
{
    self.state = MJRefreshStateIdle;
    dispatch_async(dispatch_get_main_queue(), ^{
        self.state = MJRefreshStateIdle;
    });
}
- (void)setAutomaticallyHidden:(BOOL)automaticallyHidden
{
    _automaticallyHidden = automaticallyHidden;
}
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.h
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshHeader.m
@@ -10,7 +10,7 @@
#import "MJRefreshHeader.h"
@interface MJRefreshHeader()
@property (assign, nonatomic) CGFloat insetTDelta;
@end
@implementation MJRefreshHeader
@@ -54,12 +54,20 @@
    
    // 在刷新的refreshing状态
    if (self.state == MJRefreshStateRefreshing) {
        // 暂时保留
        if (self.window == nil) return;
        // sectionheader停留解决
        CGFloat insetT = - self.scrollView.mj_offsetY > _scrollViewOriginalInset.top ? - self.scrollView.mj_offsetY : _scrollViewOriginalInset.top;
        insetT = insetT > self.mj_h + _scrollViewOriginalInset.top ? self.mj_h + _scrollViewOriginalInset.top : insetT;
        self.scrollView.mj_insetT = insetT;
        self.insetTDelta = _scrollViewOriginalInset.top - insetT;
        return;
    }
    
    // 跳转到下一个控制器时,contentInset可能会变
    _scrollViewOriginalInset = self.scrollView.contentInset;
     _scrollViewOriginalInset = self.scrollView.mj_inset;
    
    // 当前的contentOffset
    CGFloat offsetY = self.scrollView.mj_offsetY;
@@ -105,39 +113,35 @@
        
        // 恢复inset和offset
        [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
            self.scrollView.mj_insetT -= self.mj_h;
            self.scrollView.mj_insetT += self.insetTDelta;
            
            // 自动调整透明度
            if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0;
        } completion:^(BOOL finished) {
            self.pullingPercent = 0.0;
            if (self.endRefreshingCompletionBlock) {
                self.endRefreshingCompletionBlock();
            }
        }];
    } else if (state == MJRefreshStateRefreshing) {
        [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
            // 增加滚动区域
            CGFloat top = self.scrollViewOriginalInset.top + self.mj_h;
            self.scrollView.mj_insetT = top;
            // 设置滚动位置
            self.scrollView.mj_offsetY = - top;
        } completion:^(BOOL finished) {
            [self executeRefreshingCallback];
        }];
         dispatch_async(dispatch_get_main_queue(), ^{
            [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
                CGFloat top = self.scrollViewOriginalInset.top + self.mj_h;
                // 增加滚动区域top
                self.scrollView.mj_insetT = top;
                // 设置滚动位置
                CGPoint offset = self.scrollView.contentOffset;
                offset.y = -top;
                [self.scrollView setContentOffset:offset animated:NO];
            } completion:^(BOOL finished) {
                [self executeRefreshingCallback];
            }];
         });
    }
}
#pragma mark - 公共方法
- (void)endRefreshing
{
    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [super endRefreshing];
        });
    } else {
        [super endRefreshing];
    }
}
- (NSDate *)lastUpdatedTime
{
    return [[NSUserDefaults standardUserDefaults] objectForKey:self.lastUpdatedTimeKey];
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
@@ -9,6 +9,8 @@
#import "MJRefreshAutoStateFooter.h"
@interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter
@property (weak, nonatomic, readonly) UIImageView *gifView;
/** 设置state状态下的动画图片images 动画持续时间duration*/
- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
- (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
@@ -9,7 +9,9 @@
#import "MJRefreshAutoGifFooter.h"
@interface MJRefreshAutoGifFooter()
@property (weak, nonatomic) UIImageView *gifView;
{
    __unsafe_unretained UIImageView *_gifView;
}
/** 所有状态对应的动画图片 */
@property (strong, nonatomic) NSMutableDictionary *stateImages;
/** 所有状态对应的动画时间 */
@@ -64,16 +66,26 @@
}
#pragma mark - 实现父类的方法
- (void)prepare
{
    [super prepare];
    // 初始化间距
    self.labelLeftInset = 20;
}
- (void)placeSubviews
{
    [super placeSubviews];
    if (self.gifView.constraints.count) return;
    
    self.gifView.frame = self.bounds;
    if (self.isRefreshingTitleHidden) {
        self.gifView.contentMode = UIViewContentModeCenter;
    } else {
        self.gifView.contentMode = UIViewContentModeRight;
        self.gifView.mj_w = self.mj_w * 0.5 - 90;
        self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWith * 0.5;
    }
}
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
@@ -31,7 +31,7 @@
    self.loadingView = nil;
    [self setNeedsLayout];
}
#pragma makr - 重写父类的方法
#pragma mark - 重写父类的方法
- (void)prepare
{
    [super prepare];
@@ -43,13 +43,15 @@
{
    [super placeSubviews];
    
    if (self.loadingView.constraints.count) return;
    // 圈圈
    CGFloat arrowCenterX = self.mj_w * 0.5;
    CGFloat loadingCenterX = self.mj_w * 0.5;
    if (!self.isRefreshingTitleHidden) {
        arrowCenterX -= 100;
        loadingCenterX -= self.stateLabel.mj_textWith * 0.5 + self.labelLeftInset;
    }
    CGFloat arrowCenterY = self.mj_h * 0.5;
    self.loadingView.center = CGPointMake(arrowCenterX, arrowCenterY);
    CGFloat loadingCenterY = self.mj_h * 0.5;
    self.loadingView.center = CGPointMake(loadingCenterX, loadingCenterY);
}
- (void)setState:(MJRefreshState)state
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
@@ -9,6 +9,8 @@
#import "MJRefreshAutoFooter.h"
@interface MJRefreshAutoStateFooter : MJRefreshAutoFooter
/** 文字距离圈圈、箭头的距离 */
@property (assign, nonatomic) CGFloat labelLeftInset;
/** 显示刷新状态的label */
@property (weak, nonatomic, readonly) UILabel *stateLabel;
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
@@ -11,7 +11,7 @@
@interface MJRefreshAutoStateFooter()
{
    /** 显示刷新状态的label */
    __weak UILabel *_stateLabel;
    __unsafe_unretained UILabel *_stateLabel;
}
/** 所有状态对应的文字 */
@property (strong, nonatomic) NSMutableDictionary *stateTitles;
@@ -30,7 +30,7 @@
- (UILabel *)stateLabel
{
    if (!_stateLabel) {
        [self addSubview:_stateLabel = [UILabel label]];
        [self addSubview:_stateLabel = [UILabel mj_label]];
    }
    return _stateLabel;
}
@@ -56,10 +56,13 @@
{
    [super prepare];
    
    // 初始化间距
    self.labelLeftInset = MJRefreshLabelLeftInset;
    // 初始化文字
    [self setTitle:MJRefreshAutoFooterIdleText forState:MJRefreshStateIdle];
    [self setTitle:MJRefreshAutoFooterRefreshingText forState:MJRefreshStateRefreshing];
    [self setTitle:MJRefreshAutoFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterIdleText] forState:MJRefreshStateIdle];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterRefreshingText] forState:MJRefreshStateRefreshing];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterNoMoreDataText] forState:MJRefreshStateNoMoreData];
    
    // 监听label
    self.stateLabel.userInteractionEnabled = YES;
@@ -70,6 +73,8 @@
{
    [super placeSubviews];
    
    if (self.stateLabel.constraints.count) return;
    // 状态标签
    self.stateLabel.frame = self.bounds;
}
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
@@ -9,6 +9,8 @@
#import "MJRefreshBackStateFooter.h"
@interface MJRefreshBackGifFooter : MJRefreshBackStateFooter
@property (weak, nonatomic, readonly) UIImageView *gifView;
/** 设置state状态下的动画图片images 动画持续时间duration*/
- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
- (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
@@ -9,7 +9,9 @@
#import "MJRefreshBackGifFooter.h"
@interface MJRefreshBackGifFooter()
@property (weak, nonatomic) UIImageView *gifView;
{
    __unsafe_unretained UIImageView *_gifView;
}
/** 所有状态对应的动画图片 */
@property (strong, nonatomic) NSMutableDictionary *stateImages;
/** 所有状态对应的动画时间 */
@@ -64,6 +66,14 @@
}
#pragma mark - 实现父类的方法
- (void)prepare
{
    [super prepare];
    // 初始化间距
    self.labelLeftInset = 20;
}
- (void)setPullingPercent:(CGFloat)pullingPercent
{
    [super setPullingPercent:pullingPercent];
@@ -79,12 +89,14 @@
{
    [super placeSubviews];
    
    if (self.gifView.constraints.count) return;
    self.gifView.frame = self.bounds;
    if (self.stateLabel.hidden) {
        self.gifView.contentMode = UIViewContentModeCenter;
    } else {
        self.gifView.contentMode = UIViewContentModeRight;
        self.gifView.mj_w = self.mj_w * 0.5 - 90;
        self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWith * 0.5;
    }
}
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
@@ -7,10 +7,11 @@
//
#import "MJRefreshBackNormalFooter.h"
#import "NSBundle+MJRefresh.h"
@interface MJRefreshBackNormalFooter()
{
    __weak UIImageView *_arrowView;
    __unsafe_unretained UIImageView *_arrowView;
}
@property (weak, nonatomic) UIActivityIndicatorView *loadingView;
@end
@@ -20,8 +21,7 @@
- (UIImageView *)arrowView
{
    if (!_arrowView) {
        UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")] ?: [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
        UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
        UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]];
        [self addSubview:_arrowView = arrowView];
    }
    return _arrowView;
@@ -45,7 +45,7 @@
    self.loadingView = nil;
    [self setNeedsLayout];
}
#pragma makr - 重写父类的方法
#pragma mark - 重写父类的方法
- (void)prepare
{
    [super prepare];
@@ -57,17 +57,26 @@
{
    [super placeSubviews];
    
    // 箭头
    self.arrowView.mj_size = self.arrowView.image.size;
    // 箭头的中心点
    CGFloat arrowCenterX = self.mj_w * 0.5;
    if (!self.stateLabel.hidden) {
        arrowCenterX -= 100;
        arrowCenterX -= self.labelLeftInset + self.stateLabel.mj_textWith * 0.5;
    }
    CGFloat arrowCenterY = self.mj_h * 0.5;
    self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY);
    CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY);
    // 箭头
    if (self.arrowView.constraints.count == 0) {
        self.arrowView.mj_size = self.arrowView.image.size;
        self.arrowView.center = arrowCenter;
    }
    
    // 圈圈
    self.loadingView.frame = self.arrowView.frame;
    if (self.loadingView.constraints.count == 0) {
        self.loadingView.center = arrowCenter;
    }
    self.arrowView.tintColor = self.stateLabel.textColor;
}
- (void)setState:(MJRefreshState)state
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
@@ -9,6 +9,8 @@
#import "MJRefreshBackFooter.h"
@interface MJRefreshBackStateFooter : MJRefreshBackFooter
/** 文字距离圈圈、箭头的距离 */
@property (assign, nonatomic) CGFloat labelLeftInset;
/** 显示刷新状态的label */
@property (weak, nonatomic, readonly) UILabel *stateLabel;
/** 设置state状态下的文字 */
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
@@ -11,7 +11,7 @@
@interface MJRefreshBackStateFooter()
{
    /** 显示刷新状态的label */
    __weak UILabel *_stateLabel;
    __unsafe_unretained UILabel *_stateLabel;
}
/** 所有状态对应的文字 */
@property (strong, nonatomic) NSMutableDictionary *stateTitles;
@@ -30,7 +30,7 @@
- (UILabel *)stateLabel
{
    if (!_stateLabel) {
        [self addSubview:_stateLabel = [UILabel label]];
        [self addSubview:_stateLabel = [UILabel mj_label]];
    }
    return _stateLabel;
}
@@ -52,17 +52,22 @@
{
    [super prepare];
    
    // 初始化间距
    self.labelLeftInset = MJRefreshLabelLeftInset;
    // 初始化文字
    [self setTitle:MJRefreshBackFooterIdleText forState:MJRefreshStateIdle];
    [self setTitle:MJRefreshBackFooterPullingText forState:MJRefreshStatePulling];
    [self setTitle:MJRefreshBackFooterRefreshingText forState:MJRefreshStateRefreshing];
    [self setTitle:MJRefreshBackFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterIdleText] forState:MJRefreshStateIdle];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterPullingText] forState:MJRefreshStatePulling];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterRefreshingText] forState:MJRefreshStateRefreshing];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterNoMoreDataText] forState:MJRefreshStateNoMoreData];
}
- (void)placeSubviews
{
    [super placeSubviews];
    
    if (self.stateLabel.constraints.count) return;
    // 状态标签
    self.stateLabel.frame = self.bounds;
}
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h
@@ -9,6 +9,8 @@
#import "MJRefreshStateHeader.h"
@interface MJRefreshGifHeader : MJRefreshStateHeader
@property (weak, nonatomic, readonly) UIImageView *gifView;
/** 设置state状态下的动画图片images 动画持续时间duration*/
- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
- (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m
@@ -9,7 +9,9 @@
#import "MJRefreshGifHeader.h"
@interface MJRefreshGifHeader()
@property (weak, nonatomic) UIImageView *gifView;
{
    __unsafe_unretained UIImageView *_gifView;
}
/** 所有状态对应的动画图片 */
@property (strong, nonatomic) NSMutableDictionary *stateImages;
/** 所有状态对应的动画时间 */
@@ -64,6 +66,14 @@
}
#pragma mark - 实现父类的方法
- (void)prepare
{
    [super prepare];
    // 初始化间距
    self.labelLeftInset = 20;
}
- (void)setPullingPercent:(CGFloat)pullingPercent
{
    [super setPullingPercent:pullingPercent];
@@ -81,12 +91,21 @@
{
    [super placeSubviews];
    
    if (self.gifView.constraints.count) return;
    self.gifView.frame = self.bounds;
    if (self.stateLabel.hidden && self.lastUpdatedTimeLabel.hidden) {
        self.gifView.contentMode = UIViewContentModeCenter;
    } else {
        self.gifView.contentMode = UIViewContentModeRight;
        self.gifView.mj_w = self.mj_w * 0.5 - 90;
        CGFloat stateWidth = self.stateLabel.mj_textWith;
        CGFloat timeWidth = 0.0;
        if (!self.lastUpdatedTimeLabel.hidden) {
            timeWidth = self.lastUpdatedTimeLabel.mj_textWith;
        }
        CGFloat textWidth = MAX(stateWidth, timeWidth);
        self.gifView.mj_w = self.mj_w * 0.5 - textWidth * 0.5 - self.labelLeftInset;
    }
}
@@ -107,6 +126,8 @@
            self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue];
            [self.gifView startAnimating];
        }
    } else if (state == MJRefreshStateIdle) {
        [self.gifView stopAnimating];
    }
}
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
@@ -7,10 +7,11 @@
//
#import "MJRefreshNormalHeader.h"
#import "NSBundle+MJRefresh.h"
@interface MJRefreshNormalHeader()
{
    __weak UIImageView *_arrowView;
    __unsafe_unretained UIImageView *_arrowView;
}
@property (weak, nonatomic) UIActivityIndicatorView *loadingView;
@end
@@ -20,8 +21,7 @@
- (UIImageView *)arrowView
{
    if (!_arrowView) {
        UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")] ?: [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
        UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
        UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]];
        [self addSubview:_arrowView = arrowView];
    }
    return _arrowView;
@@ -46,7 +46,7 @@
    [self setNeedsLayout];
}
#pragma makr - 重写父类的方法
#pragma mark - 重写父类的方法
- (void)prepare
{
    [super prepare];
@@ -58,17 +58,32 @@
{
    [super placeSubviews];
    
    // 箭头
    self.arrowView.mj_size = self.arrowView.image.size;
    // 箭头的中心点
    CGFloat arrowCenterX = self.mj_w * 0.5;
    if (!self.stateLabel.hidden) {
        arrowCenterX -= 100;
        CGFloat stateWidth = self.stateLabel.mj_textWith;
        CGFloat timeWidth = 0.0;
        if (!self.lastUpdatedTimeLabel.hidden) {
            timeWidth = self.lastUpdatedTimeLabel.mj_textWith;
        }
        CGFloat textWidth = MAX(stateWidth, timeWidth);
        arrowCenterX -= textWidth / 2 + self.labelLeftInset;
    }
    CGFloat arrowCenterY = self.mj_h * 0.5;
    self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY);
    CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY);
    
    // 箭头
    if (self.arrowView.constraints.count == 0) {
        self.arrowView.mj_size = self.arrowView.image.size;
        self.arrowView.center = arrowCenter;
    }
    // 圈圈
    self.loadingView.frame = self.arrowView.frame;
    if (self.loadingView.constraints.count == 0) {
        self.loadingView.center = arrowCenter;
    }
    self.arrowView.tintColor = self.stateLabel.textColor;
}
- (void)setState:(MJRefreshState)state
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h
@@ -16,6 +16,8 @@
@property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel;
#pragma mark - 状态相关
/** 文字距离圈圈、箭头的距离 */
@property (assign, nonatomic) CGFloat labelLeftInset;
/** 显示刷新状态的label */
@property (weak, nonatomic, readonly) UILabel *stateLabel;
/** 设置state状态下的文字 */
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m
New file
@@ -0,0 +1,167 @@
//
//  MJRefreshStateHeader.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/4/24.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshStateHeader.h"
@interface MJRefreshStateHeader()
{
    /** 显示上一次刷新时间的label */
    __unsafe_unretained UILabel *_lastUpdatedTimeLabel;
    /** 显示刷新状态的label */
    __unsafe_unretained UILabel *_stateLabel;
}
/** 所有状态对应的文字 */
@property (strong, nonatomic) NSMutableDictionary *stateTitles;
@end
@implementation MJRefreshStateHeader
#pragma mark - 懒加载
- (NSMutableDictionary *)stateTitles
{
    if (!_stateTitles) {
        self.stateTitles = [NSMutableDictionary dictionary];
    }
    return _stateTitles;
}
- (UILabel *)stateLabel
{
    if (!_stateLabel) {
        [self addSubview:_stateLabel = [UILabel mj_label]];
    }
    return _stateLabel;
}
- (UILabel *)lastUpdatedTimeLabel
{
    if (!_lastUpdatedTimeLabel) {
        [self addSubview:_lastUpdatedTimeLabel = [UILabel mj_label]];
    }
    return _lastUpdatedTimeLabel;
}
#pragma mark - 公共方法
- (void)setTitle:(NSString *)title forState:(MJRefreshState)state
{
    if (title == nil) return;
    self.stateTitles[@(state)] = title;
    self.stateLabel.text = self.stateTitles[@(self.state)];
}
#pragma mark - 日历获取在9.x之后的系统使用currentCalendar会出异常。在8.0之后使用系统新API。
- (NSCalendar *)currentCalendar {
    if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
        return [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
    }
    return [NSCalendar currentCalendar];
}
#pragma mark key的处理
- (void)setLastUpdatedTimeKey:(NSString *)lastUpdatedTimeKey
{
    [super setLastUpdatedTimeKey:lastUpdatedTimeKey];
    // 如果label隐藏了,就不用再处理
    if (self.lastUpdatedTimeLabel.hidden) return;
    NSDate *lastUpdatedTime = [[NSUserDefaults standardUserDefaults] objectForKey:lastUpdatedTimeKey];
    // 如果有block
    if (self.lastUpdatedTimeText) {
        self.lastUpdatedTimeLabel.text = self.lastUpdatedTimeText(lastUpdatedTime);
        return;
    }
    if (lastUpdatedTime) {
        // 1.获得年月日
        NSCalendar *calendar = [self currentCalendar];
        NSUInteger unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour |NSCalendarUnitMinute;
        NSDateComponents *cmp1 = [calendar components:unitFlags fromDate:lastUpdatedTime];
        NSDateComponents *cmp2 = [calendar components:unitFlags fromDate:[NSDate date]];
        // 2.格式化日期
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        BOOL isToday = NO;
        if ([cmp1 day] == [cmp2 day]) { // 今天
            formatter.dateFormat = @" HH:mm";
            isToday = YES;
        } else if ([cmp1 year] == [cmp2 year]) { // 今年
            formatter.dateFormat = @"MM-dd HH:mm";
        } else {
            formatter.dateFormat = @"yyyy-MM-dd HH:mm";
        }
        NSString *time = [formatter stringFromDate:lastUpdatedTime];
        // 3.显示日期
        self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@%@",
                                          [NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText],
                                          isToday ? [NSBundle mj_localizedStringForKey:MJRefreshHeaderDateTodayText] : @"",
                                          time];
    } else {
        self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@",
                                          [NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText],
                                          [NSBundle mj_localizedStringForKey:MJRefreshHeaderNoneLastDateText]];
    }
}
#pragma mark - 覆盖父类的方法
- (void)prepare
{
    [super prepare];
    // 初始化间距
    self.labelLeftInset = MJRefreshLabelLeftInset;
    // 初始化文字
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderIdleText] forState:MJRefreshStateIdle];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderPullingText] forState:MJRefreshStatePulling];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderRefreshingText] forState:MJRefreshStateRefreshing];
}
- (void)placeSubviews
{
    [super placeSubviews];
    if (self.stateLabel.hidden) return;
    BOOL noConstrainsOnStatusLabel = self.stateLabel.constraints.count == 0;
    if (self.lastUpdatedTimeLabel.hidden) {
        // 状态
        if (noConstrainsOnStatusLabel) self.stateLabel.frame = self.bounds;
    } else {
        CGFloat stateLabelH = self.mj_h * 0.5;
        // 状态
        if (noConstrainsOnStatusLabel) {
            self.stateLabel.mj_x = 0;
            self.stateLabel.mj_y = 0;
            self.stateLabel.mj_w = self.mj_w;
            self.stateLabel.mj_h = stateLabelH;
        }
        // 更新时间
        if (self.lastUpdatedTimeLabel.constraints.count == 0) {
            self.lastUpdatedTimeLabel.mj_x = 0;
            self.lastUpdatedTimeLabel.mj_y = stateLabelH;
            self.lastUpdatedTimeLabel.mj_w = self.mj_w;
            self.lastUpdatedTimeLabel.mj_h = self.mj_h - self.lastUpdatedTimeLabel.mj_y;
        }
    }
}
- (void)setState:(MJRefreshState)state
{
    MJRefreshCheckState
    // 设置状态文字
    self.stateLabel.text = self.stateTitles[@(state)];
    // 重新设置key(重新显示时间)
    self.lastUpdatedTimeKey = self.lastUpdatedTimeKey;
}
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png

Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings
Binary files differ
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings
Binary files differ
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings
New file
@@ -0,0 +1,16 @@
"MJRefreshHeaderIdleText" = "下拉可以刷新";
"MJRefreshHeaderPullingText" = "鬆開立即刷新";
"MJRefreshHeaderRefreshingText" = "正在刷新數據中...";
"MJRefreshAutoFooterIdleText" = "點擊或上拉加載更多";
"MJRefreshAutoFooterRefreshingText" = "正在加載更多的數據...";
"MJRefreshAutoFooterNoMoreDataText" = "已經全部加載完畢";
"MJRefreshBackFooterIdleText" = "上拉可以加載更多";
"MJRefreshBackFooterPullingText" = "鬆開立即加載更多";
"MJRefreshBackFooterRefreshingText" = "正在加載更多的數據...";
"MJRefreshBackFooterNoMoreDataText" = "已經全部加載完畢";
"MJRefreshHeaderLastTimeText" = "最後更新:";
"MJRefreshHeaderDateTodayText" = "今天";
"MJRefreshHeaderNoneLastDateText" = "無記錄";
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.h
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefreshConst.h
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.h
@@ -3,6 +3,9 @@
#import <UIKit/UIKit.h>
#import <objc/message.h>
// 弱引用
#define MJWeakSelf __weak typeof(self) weakSelf = self;
// 日志输出
#ifdef DEBUG
#define MJRefreshLog(...) NSLog(__VA_ARGS__)
@@ -26,11 +29,8 @@
// 字体大小
#define MJRefreshLabelFont [UIFont boldSystemFontOfSize:14]
// 图片路径
#define MJRefreshSrcName(file) [@"MJRefresh.bundle" stringByAppendingPathComponent:file]
#define MJRefreshFrameworkSrcName(file) [@"Frameworks/MJRefresh.framework/MJRefresh.bundle" stringByAppendingPathComponent:file]
// 常量
UIKIT_EXTERN const CGFloat MJRefreshLabelLeftInset;
UIKIT_EXTERN const CGFloat MJRefreshHeaderHeight;
UIKIT_EXTERN const CGFloat MJRefreshFooterHeight;
UIKIT_EXTERN const CGFloat MJRefreshFastAnimationDuration;
@@ -56,6 +56,10 @@
UIKIT_EXTERN NSString *const MJRefreshBackFooterRefreshingText;
UIKIT_EXTERN NSString *const MJRefreshBackFooterNoMoreDataText;
UIKIT_EXTERN NSString *const MJRefreshHeaderLastTimeText;
UIKIT_EXTERN NSString *const MJRefreshHeaderDateTodayText;
UIKIT_EXTERN NSString *const MJRefreshHeaderNoneLastDateText;
// 状态检查
#define MJRefreshCheckState \
MJRefreshState oldState = self.state; \
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefreshConst.m
New file
@@ -0,0 +1,33 @@
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
#import <UIKit/UIKit.h>
const CGFloat MJRefreshLabelLeftInset = 25;
const CGFloat MJRefreshHeaderHeight = 54.0;
const CGFloat MJRefreshFooterHeight = 44.0;
const CGFloat MJRefreshFastAnimationDuration = 0.25;
const CGFloat MJRefreshSlowAnimationDuration = 0.4;
NSString *const MJRefreshKeyPathContentOffset = @"contentOffset";
NSString *const MJRefreshKeyPathContentInset = @"contentInset";
NSString *const MJRefreshKeyPathContentSize = @"contentSize";
NSString *const MJRefreshKeyPathPanState = @"state";
NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey";
NSString *const MJRefreshHeaderIdleText = @"MJRefreshHeaderIdleText";
NSString *const MJRefreshHeaderPullingText = @"MJRefreshHeaderPullingText";
NSString *const MJRefreshHeaderRefreshingText = @"MJRefreshHeaderRefreshingText";
NSString *const MJRefreshAutoFooterIdleText = @"MJRefreshAutoFooterIdleText";
NSString *const MJRefreshAutoFooterRefreshingText = @"MJRefreshAutoFooterRefreshingText";
NSString *const MJRefreshAutoFooterNoMoreDataText = @"MJRefreshAutoFooterNoMoreDataText";
NSString *const MJRefreshBackFooterIdleText = @"MJRefreshBackFooterIdleText";
NSString *const MJRefreshBackFooterPullingText = @"MJRefreshBackFooterPullingText";
NSString *const MJRefreshBackFooterRefreshingText = @"MJRefreshBackFooterRefreshingText";
NSString *const MJRefreshBackFooterNoMoreDataText = @"MJRefreshBackFooterNoMoreDataText";
NSString *const MJRefreshHeaderLastTimeText = @"MJRefreshHeaderLastTimeText";
NSString *const MJRefreshHeaderDateTodayText = @"MJRefreshHeaderDateTodayText";
NSString *const MJRefreshHeaderNoneLastDateText = @"MJRefreshHeaderNoneLastDateText";
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.h
New file
@@ -0,0 +1,16 @@
//
//  NSBundle+MJRefresh.h
//  MJRefreshExample
//
//  Created by MJ Lee on 16/6/13.
//  Copyright © 2016年 小码哥. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface NSBundle (MJRefresh)
+ (instancetype)mj_refreshBundle;
+ (UIImage *)mj_arrowImage;
+ (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value;
+ (NSString *)mj_localizedStringForKey:(NSString *)key;
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.m
New file
@@ -0,0 +1,61 @@
//
//  NSBundle+MJRefresh.m
//  MJRefreshExample
//
//  Created by MJ Lee on 16/6/13.
//  Copyright © 2016年 小码哥. All rights reserved.
//
#import "NSBundle+MJRefresh.h"
#import "MJRefreshComponent.h"
@implementation NSBundle (MJRefresh)
+ (instancetype)mj_refreshBundle
{
    static NSBundle *refreshBundle = nil;
    if (refreshBundle == nil) {
        // 这里不使用mainBundle是为了适配pod 1.x和0.x
        refreshBundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[MJRefreshComponent class]] pathForResource:@"MJRefresh" ofType:@"bundle"]];
    }
    return refreshBundle;
}
+ (UIImage *)mj_arrowImage
{
    static UIImage *arrowImage = nil;
    if (arrowImage == nil) {
        arrowImage = [[UIImage imageWithContentsOfFile:[[self mj_refreshBundle] pathForResource:@"arrow@2x" ofType:@"png"]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
    }
    return arrowImage;
}
+ (NSString *)mj_localizedStringForKey:(NSString *)key
{
    return [self mj_localizedStringForKey:key value:nil];
}
+ (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value
{
    static NSBundle *bundle = nil;
    if (bundle == nil) {
        // (iOS获取的语言字符串比较不稳定)目前框架只处理en、zh-Hans、zh-Hant三种情况,其他按照系统默认处理
        NSString *language = [NSLocale preferredLanguages].firstObject;
        if ([language hasPrefix:@"en"]) {
            language = @"en";
        } else if ([language hasPrefix:@"zh"]) {
            if ([language rangeOfString:@"Hans"].location != NSNotFound) {
                language = @"zh-Hans"; // 简体中文
            } else { // zh-Hant\zh-HK\zh-TW
                language = @"zh-Hant"; // 繁體中文
            }
        } else {
            language = @"en";
        }
        // 从MJRefresh.bundle中查找资源
        bundle = [NSBundle bundleWithPath:[[NSBundle mj_refreshBundle] pathForResource:language ofType:@"lproj"]];
    }
    value = [bundle localizedStringForKey:key value:value table:nil];
    return [[NSBundle mainBundle] localizedStringForKey:key value:value table:nil];
}
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.h
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.h
@@ -10,6 +10,8 @@
#import <UIKit/UIKit.h>
@interface UIScrollView (MJExtension)
@property (readonly, nonatomic) UIEdgeInsets mj_inset;
@property (assign, nonatomic) CGFloat mj_insetT;
@property (assign, nonatomic) CGFloat mj_insetB;
@property (assign, nonatomic) CGFloat mj_insetL;
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.m
@@ -10,54 +10,94 @@
#import "UIScrollView+MJExtension.h"
#import <objc/runtime.h>
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availability-new"
@implementation UIScrollView (MJExtension)
static BOOL gt_ios_11_;
+ (void)load
{
    // 缓存判断值
    gt_ios_11_ = [[[UIDevice currentDevice] systemVersion] compare:@"11.0" options:NSNumericSearch] != NSOrderedAscending;
}
- (UIEdgeInsets)mj_inset
{
#ifdef __IPHONE_11_0
    if (gt_ios_11_) {
        return self.adjustedContentInset;
    }
#endif
    return self.contentInset;
}
- (void)setMj_insetT:(CGFloat)mj_insetT
{
    UIEdgeInsets inset = self.contentInset;
    inset.top = mj_insetT;
#ifdef __IPHONE_11_0
    if (gt_ios_11_) {
        inset.top -= (self.adjustedContentInset.top - self.contentInset.top);
    }
#endif
    self.contentInset = inset;
}
- (CGFloat)mj_insetT
{
    return self.contentInset.top;
    return self.mj_inset.top;
}
- (void)setMj_insetB:(CGFloat)mj_insetB
{
    UIEdgeInsets inset = self.contentInset;
    inset.bottom = mj_insetB;
#ifdef __IPHONE_11_0
    if (gt_ios_11_) {
        inset.bottom -= (self.adjustedContentInset.bottom - self.contentInset.bottom);
    }
#endif
    self.contentInset = inset;
}
- (CGFloat)mj_insetB
{
    return self.contentInset.bottom;
    return self.mj_inset.bottom;
}
- (void)setMj_insetL:(CGFloat)mj_insetL
{
    UIEdgeInsets inset = self.contentInset;
    inset.left = mj_insetL;
#ifdef __IPHONE_11_0
    if (gt_ios_11_) {
        inset.left -= (self.adjustedContentInset.left - self.contentInset.left);
    }
#endif
    self.contentInset = inset;
}
- (CGFloat)mj_insetL
{
    return self.contentInset.left;
    return self.mj_inset.left;
}
- (void)setMj_insetR:(CGFloat)mj_insetR
{
    UIEdgeInsets inset = self.contentInset;
    inset.right = mj_insetR;
#ifdef __IPHONE_11_0
    if (gt_ios_11_) {
        inset.right -= (self.adjustedContentInset.right - self.contentInset.right);
    }
#endif
    self.contentInset = inset;
}
- (CGFloat)mj_insetR
{
    return self.contentInset.right;
    return self.mj_inset.right;
}
- (void)setMj_offsetX:(CGFloat)mj_offsetX
@@ -108,3 +148,4 @@
    return self.contentSize.height;
}
@end
#pragma clang diagnostic pop
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h
New file
@@ -0,0 +1,26 @@
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
//  UIScrollView+MJRefresh.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/4.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//  给ScrollView增加下拉刷新、上拉刷新的功能
#import <UIKit/UIKit.h>
#import "MJRefreshConst.h"
@class MJRefreshHeader, MJRefreshFooter;
@interface UIScrollView (MJRefresh)
/** 下拉刷新控件 */
@property (strong, nonatomic) MJRefreshHeader *mj_header;
@property (strong, nonatomic) MJRefreshHeader *header MJRefreshDeprecated("使用mj_header");
/** 上拉刷新控件 */
@property (strong, nonatomic) MJRefreshFooter *mj_footer;
@property (strong, nonatomic) MJRefreshFooter *footer MJRefreshDeprecated("使用mj_footer");
#pragma mark - other
- (NSInteger)mj_totalDataCount;
@property (copy, nonatomic) void (^mj_reloadDataBlock)(NSInteger totalDataCount);
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.m
@@ -30,50 +30,71 @@
#pragma mark - header
static const char MJRefreshHeaderKey = '\0';
- (void)setHeader:(MJRefreshHeader *)header
- (void)setMj_header:(MJRefreshHeader *)mj_header
{
    if (header != self.header) {
    if (mj_header != self.mj_header) {
        // 删除旧的,添加新的
        [self.header removeFromSuperview];
        [self addSubview:header];
        [self.mj_header removeFromSuperview];
        [self insertSubview:mj_header atIndex:0];
        
        // 存储新的
        [self willChangeValueForKey:@"header"]; // KVO
        [self willChangeValueForKey:@"mj_header"]; // KVO
        objc_setAssociatedObject(self, &MJRefreshHeaderKey,
                                 header, OBJC_ASSOCIATION_ASSIGN);
        [self didChangeValueForKey:@"header"]; // KVO
                                 mj_header, OBJC_ASSOCIATION_ASSIGN);
        [self didChangeValueForKey:@"mj_header"]; // KVO
    }
}
- (MJRefreshHeader *)header
- (MJRefreshHeader *)mj_header
{
    return objc_getAssociatedObject(self, &MJRefreshHeaderKey);
}
#pragma mark - footer
static const char MJRefreshFooterKey = '\0';
- (void)setFooter:(MJRefreshFooter *)footer
- (void)setMj_footer:(MJRefreshFooter *)mj_footer
{
    if (footer != self.footer) {
    if (mj_footer != self.mj_footer) {
        // 删除旧的,添加新的
        [self.footer removeFromSuperview];
        [self addSubview:footer];
        [self.mj_footer removeFromSuperview];
        [self insertSubview:mj_footer atIndex:0];
        
        // 存储新的
        [self willChangeValueForKey:@"footer"]; // KVO
        [self willChangeValueForKey:@"mj_footer"]; // KVO
        objc_setAssociatedObject(self, &MJRefreshFooterKey,
                                 footer, OBJC_ASSOCIATION_ASSIGN);
        [self didChangeValueForKey:@"footer"]; // KVO
                                 mj_footer, OBJC_ASSOCIATION_ASSIGN);
        [self didChangeValueForKey:@"mj_footer"]; // KVO
    }
}
- (MJRefreshFooter *)footer
- (MJRefreshFooter *)mj_footer
{
    return objc_getAssociatedObject(self, &MJRefreshFooterKey);
}
#pragma mark - 过期
- (void)setFooter:(MJRefreshFooter *)footer
{
    self.mj_footer = footer;
}
- (MJRefreshFooter *)footer
{
    return self.mj_footer;
}
- (void)setHeader:(MJRefreshHeader *)header
{
    self.mj_header = header;
}
- (MJRefreshHeader *)header
{
    return self.mj_header;
}
#pragma mark - other
- (NSInteger)totalDataCount
- (NSInteger)mj_totalDataCount
{
    NSInteger totalCount = 0;
    if ([self isKindOfClass:[UITableView class]]) {
@@ -93,21 +114,21 @@
}
static const char MJRefreshReloadDataBlockKey = '\0';
- (void)setReloadDataBlock:(void (^)(NSInteger))reloadDataBlock
- (void)setMj_reloadDataBlock:(void (^)(NSInteger))mj_reloadDataBlock
{
    [self willChangeValueForKey:@"reloadDataBlock"]; // KVO
    objc_setAssociatedObject(self, &MJRefreshReloadDataBlockKey, reloadDataBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
    [self didChangeValueForKey:@"reloadDataBlock"]; // KVO
    [self willChangeValueForKey:@"mj_reloadDataBlock"]; // KVO
    objc_setAssociatedObject(self, &MJRefreshReloadDataBlockKey, mj_reloadDataBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
    [self didChangeValueForKey:@"mj_reloadDataBlock"]; // KVO
}
- (void (^)(NSInteger))reloadDataBlock
- (void (^)(NSInteger))mj_reloadDataBlock
{
    return objc_getAssociatedObject(self, &MJRefreshReloadDataBlockKey);
}
- (void)executeReloadDataBlock
{
    !self.reloadDataBlock ? : self.reloadDataBlock(self.totalDataCount);
    !self.mj_reloadDataBlock ? : self.mj_reloadDataBlock(self.mj_totalDataCount);
}
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIView+MJExtension.h
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIView+MJExtension.m
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.m
File was deleted
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/README.md
New file
@@ -0,0 +1,362 @@
![(logo)](http://images.cnitblog.com/blog2015/497279/201505/051004492043385.png)
## MJRefresh
* An easy way to use pull-to-refresh
## Contents
* Getting Started
    * [Features【Support what kinds of controls to refresh】](#Support_what_kinds_of_controls_to_refresh)
    * [Installation【How to use MJRefresh】](#How_to_use_MJRefresh)
    * [Who's using【More than hundreds of Apps are using MJRefresh】](#More_than_hundreds_of_Apps_are_using_MJRefresh)
    * [Classes【The Class Structure Chart of MJRefresh】](#The_Class_Structure_Chart_of_MJRefresh)
* Comment API
    * [MJRefreshComponent.h](#MJRefreshComponent.h)
    * [MJRefreshHeader.h](#MJRefreshHeader.h)
    * [MJRefreshFooter.h](#MJRefreshFooter.h)
    * [MJRefreshAutoFooter.h](#MJRefreshAutoFooter.h)
* Examples
    * [Reference](#Reference)
    * [The drop-down refresh 01-Default](#The_drop-down_refresh_01-Default)
    * [The drop-down refresh 02-Animation image](#The_drop-down_refresh_02-Animation_image)
    * [The drop-down refresh 03-Hide the time](#The_drop-down_refresh_03-Hide_the_time)
    * [The drop-down refresh 04-Hide status and time](#The_drop-down_refresh_04-Hide_status_and_time)
    * [The drop-down refresh 05-DIY title](#The_drop-down_refresh_05-DIY_title)
    * [The drop-down refresh 06-DIY the control of refresh](#The_drop-down_refresh_06-DIY_the_control_of_refresh)
    * [The pull to refresh 01-Default](#The_pull_to_refresh_01-Default)
    * [The pull to refresh 02-Animation image](#The_pull_to_refresh_02-Animation_image)
    * [The pull to refresh 03-Hide the title of refresh status](#The_pull_to_refresh_03-Hide_the_title_of_refresh_status)
    * [The pull to refresh 04-All loaded](#The_pull_to_refresh_04-All_loaded)
    * [The pull to refresh 05-DIY title](#The_pull_to_refresh_05-DIY_title)
    * [The pull to refresh 06-Hidden After loaded](#The_pull_to_refresh_06-Hidden_After_loaded)
    * [The pull to refresh 07-Automatic back of the pull01](#The_pull_to_refresh_07-Automatic_back_of_the_pull01)
    * [The pull to refresh 08-Automatic back of the pull02](#The_pull_to_refresh_08-Automatic_back_of_the_pull02)
    * [The pull to refresh 09-DIY the control of refresh(Automatic refresh)](#The_pull_to_refresh_09-DIY_the_control_of_refresh(Automatic_refresh))
    * [The pull to refresh 10-DIY the control of refresh(Automatic back)](#The_pull_to_refresh_10-DIY_the_control_of_refresh(Automatic_back))
    * [UICollectionView01-The pull and drop-down refresh](#UICollectionView01-The_pull_and_drop-down_refresh)
    * [UIWebView01-The drop-down refresh](#UIWebView01-The_drop-down_refresh)
* [Hope](#Hope)
## <a id="Support_what_kinds_of_controls_to_refresh"></a>Support what kinds of controls to refresh
* `UIScrollView`、`UITableView`、`UICollectionView`、`UIWebView`
## <a id="How_to_use_MJRefresh"></a>How to use MJRefresh
* Installation with CocoaPods:`pod 'MJRefresh'`
* Manual import:
    * Drag All files in the `MJRefresh` folder to project
    * Import the main file:`#import "MJRefresh.h"`
```objc
Base                        Custom
MJRefresh.bundle            MJRefresh.h
MJRefreshConst.h            MJRefreshConst.m
UIScrollView+MJExtension.h  UIScrollView+MJExtension.m
UIScrollView+MJRefresh.h    UIScrollView+MJRefresh.m
UIView+MJExtension.h        UIView+MJExtension.m
```
## <a id="More_than_hundreds_of_Apps_are_using_MJRefresh"></a>More than hundreds of Apps are using MJRefresh
<img src="http://images0.cnblogs.com/blog2015/497279/201506/141212365041650.png" width="200" height="300">
* More information of App can focus on:[M了个J-博客园](http://www.cnblogs.com/mjios/p/4409853.html)
## <a id="The_Class_Structure_Chart_of_MJRefresh"></a>The Class Structure Chart of MJRefresh
![](http://images0.cnblogs.com/blog2015/497279/201506/132232456139177.png)
- `The class of red text` in the chart:You can use them directly
    - The drop-down refresh control types
        - Normal:`MJRefreshNormalHeader`
        - Gif:`MJRefreshGifHeader`
    - The pull to refresh control types
        - Auto refresh
            - Normal:`MJRefreshAutoNormalFooter`
            - Gif:`MJRefreshAutoGifFooter`
        - Auto Back
            - Normal:`MJRefreshBackNormalFooter`
            - Gif:`MJRefreshBackGifFooter`
- `The class of non-red text` in the chart:For inheritance,to use DIY the control of refresh
- About how to DIY the control of refresh,You can refer the Class in below Chart<br>
<img src="http://images0.cnblogs.com/blog2015/497279/201506/141358159107893.png" width="30%" height="30%">
## <a id="MJRefreshComponent.h"></a>MJRefreshComponent.h
```objc
/** The Base Class of refresh control */
@interface MJRefreshComponent : UIView
#pragma mark -  Control the state of Refresh
/** BeginRefreshing */
- (void)beginRefreshing;
/** EndRefreshing */
- (void)endRefreshing;
/** IsRefreshing */
- (BOOL)isRefreshing;
#pragma mark - Other
/** According to the drag ratio to change alpha automatically */
@property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha;
@end
```
## <a id="MJRefreshHeader.h"></a>MJRefreshHeader.h
```objc
@interface MJRefreshHeader : MJRefreshComponent
/** Creat header */
+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** Creat header */
+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
/** This key is used to storage the time that the last time of drown-down successfully */
@property (copy, nonatomic) NSString *lastUpdatedTimeKey;
/** The last time of drown-down successfully */
@property (strong, nonatomic, readonly) NSDate *lastUpdatedTime;
/** Ignored scrollView contentInset top */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop;
@end
```
## <a id="MJRefreshFooter.h"></a>MJRefreshFooter.h
```objc
@interface MJRefreshFooter : MJRefreshComponent
/** Creat footer */
+ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** Creat footer */
+ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
/** NoticeNoMoreData */
- (void)noticeNoMoreData;
/** ResetNoMoreData(Clear the status of NoMoreData ) */
- (void)resetNoMoreData;
/** Ignored scrollView contentInset bottom */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom;
/** Automaticlly show or hidden by the count of data(Show-have data,Hidden- no data) */
@property (assign, nonatomic) BOOL automaticallyHidden;
@end
```
## <a id="MJRefreshAutoFooter.h"></a>MJRefreshAutoFooter.h
```objc
@interface MJRefreshAutoFooter : MJRefreshFooter
/** Is Automatically Refresh(Default is Yes) */
@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
/** When there is much at the bottom of the control is automatically refresh(Default is 1.0,Is at the bottom of the control appears in full, will refresh automatically) */
@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
@end
```
## <a id="Reference"></a>Reference
```objc
* Due to there are more functions of this framework,Don't write specific text describe its usage
* You can directly reference examples MJTableViewController、MJCollectionViewController、MJWebViewController,More intuitive and fast.
```
<img src="http://images0.cnblogs.com/blog2015/497279/201506/141345470048120.png" width="30%" height="30%">
## <a id="The_drop-down_refresh_01-Default"></a>The drop-down refresh 01-Default
```objc
self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
   //Call this Block When enter the refresh status automatically
}];
// Set the callback(Once you enter the refresh status,then call the action of target,that is call [self loadNewData])
self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// Enter the refresh status immediately
[self.tableView.header beginRefreshing];
```
![(下拉刷新01-普通)](http://images0.cnblogs.com/blog2015/497279/201506/141204343486151.gif)
## <a id="The_drop-down_refresh_02-Animation_image"></a>The drop-down refresh 02-Animation image
```objc
// Set the callback(一Once you enter the refresh status,then call the action of target,that is call [self loadNewData])
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// Set the ordinary state of animated images
[header setImages:idleImages forState:MJRefreshStateIdle];
// Set the pulling state of animated images(Enter the status of refreshing as soon as loosen)
[header setImages:pullingImages forState:MJRefreshStatePulling];
// Set the refreshing state of animated images
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];
// Set header
self.tableView.mj_header = header;
```
![(下拉刷新02-动画图片)](http://images0.cnblogs.com/blog2015/497279/201506/141204402238389.gif)
## <a id="The_drop-down_refresh_03-Hide_the_time"></a>The drop-down refresh 03-Hide the time
```objc
// Hide the time
header.lastUpdatedTimeLabel.hidden = YES;
```
![(下拉刷新03-隐藏时间)](http://images0.cnblogs.com/blog2015/497279/201506/141204456132944.gif)
## <a id="The_drop-down_refresh_04-Hide_status_and_time"></a>The drop-down refresh 04-Hide status and time
```objc
// Hide the time
header.lastUpdatedTimeLabel.hidden = YES;
// Hide the status
header.stateLabel.hidden = YES;
```
![(下拉刷新04-隐藏状态和时间0)](http://images0.cnblogs.com/blog2015/497279/201506/141204508639539.gif)
## <a id="The_drop-down_refresh_05-DIY_title"></a>The drop-down refresh 05-DIY title
```objc
// Set title
[header setTitle:@"Pull down to refresh" forState:MJRefreshStateIdle];
[header setTitle:@"Release to refresh" forState:MJRefreshStatePulling];
[header setTitle:@"Loading ..." forState:MJRefreshStateRefreshing];
// Set font
header.stateLabel.font = [UIFont systemFontOfSize:15];
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];
// Set textColor
header.stateLabel.textColor = [UIColor redColor];
header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
```
![(下拉刷新05-自定义文字)](http://images0.cnblogs.com/blog2015/497279/201506/141204563633593.gif)
## <a id="The_drop-down_refresh_06-DIY_the_control_of_refresh"></a>The drop-down refresh 06-DIY the control of refresh
```objc
self.tableView.mj_header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// Implementation reference to MJDIYHeader.h和MJDIYHeader.m
```
![(下拉刷新06-自定义刷新控件)](http://images0.cnblogs.com/blog2015/497279/201506/141205019261159.gif)
## <a id="The_pull_to_refresh_01-Default"></a>The pull to refresh 01-Default
```objc
self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
    //Call this Block When enter the refresh status automatically
}];
// Set the callback(Once you enter the refresh status,then call the action of target,that is call [self loadMoreData])
self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
```
![(上拉刷新01-默认)](http://images0.cnblogs.com/blog2015/497279/201506/141205090047696.gif)
## <a id="The_pull_to_refresh_02-Animation_image"></a>The pull to refresh 02-Animation image
```objc
// Set the callback(Once you enter the refresh status,then call the action of target,that is call [self loadMoreData])
MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// Set the refresh image
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
// Set footer
self.tableView.mj_footer = footer;
```
![(上拉刷新02-动画图片)](http://images0.cnblogs.com/blog2015/497279/201506/141205141445793.gif)
## <a id="The_pull_to_refresh_03-Hide_the_title_of_refresh_status"></a>The pull to refresh 03-Hide the title of refresh status
```objc
// Hide the title of refresh status
footer.refreshingTitleHidden = YES;
// If does have not above method,then use footer.stateLabel.hidden = YES;
```
![(上拉刷新03-隐藏刷新状态的文字)](http://images0.cnblogs.com/blog2015/497279/201506/141205200985774.gif)
## <a id="The_pull_to_refresh_04-All_loaded"></a>The pull to refresh 04-All loaded
```objc
//Become the status of NoMoreData
[footer noticeNoMoreData];
```
![(上拉刷新04-全部加载完毕)](http://images0.cnblogs.com/blog2015/497279/201506/141205248634686.gif)
## <a id="The_pull_to_refresh_05-DIY_title"></a>The pull to refresh 05-DIY title
```objc
// Set title
[footer setTitle:@"Click or drag up to refresh" forState:MJRefreshStateIdle];
[footer setTitle:@"Loading more ..." forState:MJRefreshStateRefreshing];
[footer setTitle:@"No more data" forState:MJRefreshStateNoMoreData];
// Set font
footer.stateLabel.font = [UIFont systemFontOfSize:17];
// Set textColor
footer.stateLabel.textColor = [UIColor blueColor];
```
![(上拉刷新05-自定义文字)](http://images0.cnblogs.com/blog2015/497279/201506/141205295511153.gif)
## <a id="The_pull_to_refresh_06-Hidden_After_loaded"></a>The pull to refresh 06-Hidden After loaded
```objc
//Hidden current control of the pull to refresh
self.tableView.mj_footer.hidden = YES;
```
![(上拉刷新06-加载后隐藏)](http://images0.cnblogs.com/blog2015/497279/201506/141205343481821.gif)
## <a id="The_pull_to_refresh_07-Automatic_back_of_the_pull01"></a>The pull to refresh 07-Automatic back of the pull01
```objc
self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
```
![(上拉刷新07-自动回弹的上拉01)](http://images0.cnblogs.com/blog2015/497279/201506/141205392239231.gif)
## <a id="The_pull_to_refresh_08-Automatic_back_of_the_pull02"></a>The pull to refresh 08-Automatic back of the pull02
```objc
MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// Set the normal state of the animated image
[footer setImages:idleImages forState:MJRefreshStateIdle];
//  Set the pulling state of animated images(Enter the status of refreshing as soon as loosen)
[footer setImages:pullingImages forState:MJRefreshStatePulling];
// Set the refreshing state of animated images
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
// Set footer
self.tableView.mj_footer = footer;
```
![(上拉刷新07-自动回弹的上拉02)](http://images0.cnblogs.com/blog2015/497279/201506/141205441443628.gif)
## <a id="The_pull_to_refresh_09-DIY_the_control_of_refresh(Automatic_refresh)"></a>The pull to refresh 09-DIY the control of refresh(Automatic refresh)
```objc
self.tableView.mj_footer = [MJDIYAutoFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// Implementation reference to MJDIYAutoFooter.h和MJDIYAutoFooter.m
```
![(上拉刷新09-自定义刷新控件(自动刷新))](http://images0.cnblogs.com/blog2015/497279/201506/141205500195866.gif)
## <a id="The_pull_to_refresh_10-DIY_the_control_of_refresh(Automatic_back)"></a>The pull to refresh 10-DIY the control of refresh(Automatic back)
```objc
self.tableView.mj_footer = [MJDIYBackFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// Implementation reference to MJDIYBackFooter.h和MJDIYBackFooter.m
```
![(上拉刷新10-自定义刷新控件(自动回弹))](http://images0.cnblogs.com/blog2015/497279/201506/141205560666819.gif)
## <a id="UICollectionView01-The_pull_and_drop-down_refresh"></a>UICollectionView01-The pull and drop-down refresh
```objc
// The drop-down refresh
self.collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
   //Call this Block When enter the refresh status automatically
}];
// The pull to refresh
self.collectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
   //Call this Block When enter the refresh status automatically
}];
```
![(UICollectionView01-上下拉刷新)](http://images0.cnblogs.com/blog2015/497279/201506/141206021603758.gif)
## <a id="UIWebView01-The_drop-down_refresh"></a>UIWebView01-The drop-down refresh
```objc
//Add the control of The drop-down refresh
self.webView.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
   //Call this Block When enter the refresh status automatically
}];
```
![(UICollectionView01-上下拉刷新)](http://images0.cnblogs.com/blog2015/497279/201506/141206080514524.gif)
## Remind
* ARC
* iOS>=6.0
* iPhone \ iPad screen anyway
## <a id="Hope"></a>Hope
* If you find bug when used,Hope you can Issues me,Thank you or try to download the latest code of this framework to see the BUG has been fixed or not)
* If you find the function is not enough when used,Hope you can Issues me,I very much to add more useful function to this framework ,Thank you !
* If you want to contribute code for MJRefresh,please Pull Requests me
*  If you use MJRefresh in your develop app,Hope you can go to[CocoaControls](https://www.cocoacontrols.com/controls/mjrefresh)to add the iTunes path
 of you app,I Will install your app,and according to the usage of many app,to be a better design and improve to MJRefresh,Thank you !
   * StepO1(WeChat is just an Example,Explore“Your app name itunes”)
![(step01)](http://ww4.sinaimg.cn/mw1024/800cdf9ctw1eq0viiv5rsj20sm0ea41t.jpg)
   * StepO2
![(step02)](http://ww2.sinaimg.cn/mw1024/800cdf9ctw1eq0vilejxlj20tu0me7a0.jpg)
   * StepO3
![(step03)](http://ww1.sinaimg.cn/mw1024/800cdf9ctw1eq0viocpo5j20wc0dc0un.jpg)
   * StepO4
![(step04)](http://ww3.sinaimg.cn/mw1024/800cdf9ctw1eq0vir137xj20si0gewgu.jpg)
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.h
File was deleted
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASCompositeConstraint.h
old mode 100644 new mode 100755
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASCompositeConstraint.m
old mode 100644 new mode 100755
@@ -97,7 +97,7 @@
#pragma mark - Animator proxy
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
- (MASConstraint *)animator {
    for (MASConstraint *constraint in self.childConstraints) {
@@ -129,6 +129,12 @@
    }
}
- (void)setInset:(CGFloat)inset {
    for (MASConstraint *constraint in self.childConstraints) {
        constraint.inset = inset;
    }
}
- (void)setOffset:(CGFloat)offset {
    for (MASConstraint *constraint in self.childConstraints) {
        constraint.offset = offset;
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint+Private.h
old mode 100644 new mode 100755
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.h
old mode 100644 new mode 100755
@@ -27,6 +27,13 @@
/**
 *    Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
 */
- (MASConstraint * (^)(CGFloat inset))inset;
/**
 *    Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeWidth, NSLayoutAttributeHeight
 */
- (MASConstraint * (^)(CGSize offset))sizeOffset;
@@ -66,17 +73,17 @@
/**
 *    Sets the NSLayoutConstraint priority to MASLayoutPriorityLow
 */
- (MASConstraint * (^)())priorityLow;
- (MASConstraint * (^)(void))priorityLow;
/**
 *    Sets the NSLayoutConstraint priority to MASLayoutPriorityMedium
 */
- (MASConstraint * (^)())priorityMedium;
- (MASConstraint * (^)(void))priorityMedium;
/**
 *    Sets the NSLayoutConstraint priority to MASLayoutPriorityHigh
 */
- (MASConstraint * (^)())priorityHigh;
- (MASConstraint * (^)(void))priorityHigh;
/**
 *    Sets the constraint relation to NSLayoutRelationEqual
@@ -127,7 +134,14 @@
- (MASConstraint *)centerY;
- (MASConstraint *)baseline;
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
- (MASConstraint *)firstBaseline;
- (MASConstraint *)lastBaseline;
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
- (MASConstraint *)leftMargin;
- (MASConstraint *)rightMargin;
@@ -159,6 +173,13 @@
/**
 *    Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
 */
- (void)setInset:(CGFloat)inset;
/**
 *    Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeWidth, NSLayoutAttributeHeight
 */
- (void)setSizeOffset:(CGSize)sizeOffset;
@@ -178,7 +199,7 @@
// NSLayoutConstraint Installation support
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
/**
 *  Whether or not to go through the animator proxy when modifying the constraint
 */
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.m
old mode 100644 new mode 100755
@@ -62,21 +62,21 @@
#pragma mark - MASLayoutPriority proxies
- (MASConstraint * (^)())priorityLow {
- (MASConstraint * (^)(void))priorityLow {
    return ^id{
        self.priority(MASLayoutPriorityDefaultLow);
        return self;
    };
}
- (MASConstraint * (^)())priorityMedium {
- (MASConstraint * (^)(void))priorityMedium {
    return ^id{
        self.priority(MASLayoutPriorityDefaultMedium);
        return self;
    };
}
- (MASConstraint * (^)())priorityHigh {
- (MASConstraint * (^)(void))priorityHigh {
    return ^id{
        self.priority(MASLayoutPriorityDefaultHigh);
        return self;
@@ -88,6 +88,13 @@
- (MASConstraint * (^)(MASEdgeInsets))insets {
    return ^id(MASEdgeInsets insets){
        self.insets = insets;
        return self;
    };
}
- (MASConstraint * (^)(CGFloat))inset {
    return ^id(CGFloat inset){
        self.inset = inset;
        return self;
    };
}
@@ -208,7 +215,18 @@
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline];
}
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
- (MASConstraint *)firstBaseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline];
}
- (MASConstraint *)lastBaseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline];
}
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
- (MASConstraint *)leftMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin];
@@ -258,13 +276,15 @@
- (void)setInsets:(MASEdgeInsets __unused)insets { MASMethodNotImplemented(); }
- (void)setInset:(CGFloat __unused)inset { MASMethodNotImplemented(); }
- (void)setSizeOffset:(CGSize __unused)sizeOffset { MASMethodNotImplemented(); }
- (void)setCenterOffset:(CGPoint __unused)centerOffset { MASMethodNotImplemented(); }
- (void)setOffset:(CGFloat __unused)offset { MASMethodNotImplemented(); }
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
- (MASConstraint *)animator { MASMethodNotImplemented(); }
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.h
old mode 100644 new mode 100755
@@ -1,5 +1,5 @@
//
//  MASConstraintBuilder.h
//  MASConstraintMaker.h
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
@@ -22,7 +22,14 @@
    MASAttributeCenterY = 1 << NSLayoutAttributeCenterY,
    MASAttributeBaseline = 1 << NSLayoutAttributeBaseline,
    
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
    MASAttributeFirstBaseline = 1 << NSLayoutAttributeFirstBaseline,
    MASAttributeLastBaseline = 1 << NSLayoutAttributeLastBaseline,
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
    
    MASAttributeLeftMargin = 1 << NSLayoutAttributeLeftMargin,
    MASAttributeRightMargin = 1 << NSLayoutAttributeRightMargin,
@@ -60,7 +67,14 @@
@property (nonatomic, strong, readonly) MASConstraint *centerY;
@property (nonatomic, strong, readonly) MASConstraint *baseline;
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
@property (nonatomic, strong, readonly) MASConstraint *firstBaseline;
@property (nonatomic, strong, readonly) MASConstraint *lastBaseline;
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
@property (nonatomic, strong, readonly) MASConstraint *leftMargin;
@property (nonatomic, strong, readonly) MASConstraint *rightMargin;
@@ -114,7 +128,7 @@
/**
 *    initialises the maker with a default view
 *
 *    @param    view    any MASConstrait are created with this view as the first item
 *    @param    view    any MASConstraint are created with this view as the first item
 *
 *    @return    a new MASConstraintMaker
 */
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.m
old mode 100644 new mode 100755
@@ -1,5 +1,5 @@
//
//  MASConstraintBuilder.m
//  MASConstraintMaker.m
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
@@ -78,7 +78,10 @@
    __unused MASAttribute anyAttribute = (MASAttributeLeft | MASAttributeRight | MASAttributeTop | MASAttributeBottom | MASAttributeLeading
                                          | MASAttributeTrailing | MASAttributeWidth | MASAttributeHeight | MASAttributeCenterX
                                          | MASAttributeCenterY | MASAttributeBaseline
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
                                          | MASAttributeFirstBaseline | MASAttributeLastBaseline
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
                                          | MASAttributeLeftMargin | MASAttributeRightMargin | MASAttributeTopMargin | MASAttributeBottomMargin
                                          | MASAttributeLeadingMargin | MASAttributeTrailingMargin | MASAttributeCenterXWithinMargins
                                          | MASAttributeCenterYWithinMargins
@@ -101,7 +104,14 @@
    if (attrs & MASAttributeCenterY) [attributes addObject:self.view.mas_centerY];
    if (attrs & MASAttributeBaseline) [attributes addObject:self.view.mas_baseline];
    
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
    if (attrs & MASAttributeFirstBaseline) [attributes addObject:self.view.mas_firstBaseline];
    if (attrs & MASAttributeLastBaseline) [attributes addObject:self.view.mas_lastBaseline];
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
    
    if (attrs & MASAttributeLeftMargin) [attributes addObject:self.view.mas_leftMargin];
    if (attrs & MASAttributeRightMargin) [attributes addObject:self.view.mas_rightMargin];
@@ -182,7 +192,20 @@
    };
}
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
- (MASConstraint *)firstBaseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline];
}
- (MASConstraint *)lastBaseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline];
}
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
- (MASConstraint *)leftMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin];
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASLayoutConstraint.h
old mode 100644 new mode 100755
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASLayoutConstraint.m
old mode 100644 new mode 100755
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASUtilities.h
old mode 100644 new mode 100755
@@ -8,7 +8,9 @@
#import <Foundation/Foundation.h>
#if TARGET_OS_IPHONE
#if TARGET_OS_IPHONE || TARGET_OS_TV
    #import <UIKit/UIKit.h>
    #define MAS_VIEW UIView
@@ -49,13 +51,15 @@
 *
 *  MASAttachKeys(view1, view2);
 */
#define MASAttachKeys(...)                                                    \
    NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__);     \
    for (id key in keyPairs.allKeys) {                                        \
        id obj = keyPairs[key];                                               \
        NSAssert([obj respondsToSelector:@selector(setMas_key:)],             \
                 @"Cannot attach mas_key to %@", obj);                        \
        [obj setMas_key:key];                                                 \
#define MASAttachKeys(...)                                                        \
    {                                                                             \
        NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__);     \
        for (id key in keyPairs.allKeys) {                                        \
            id obj = keyPairs[key];                                               \
            NSAssert([obj respondsToSelector:@selector(setMas_key:)],             \
                     @"Cannot attach mas_key to %@", obj);                        \
            [obj setMas_key:key];                                                 \
        }                                                                         \
    }
/**
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.h
old mode 100644 new mode 100755
@@ -1,5 +1,5 @@
//
//  MASAttribute.h
//  MASViewAttribute.h
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.m
old mode 100644 new mode 100755
@@ -1,5 +1,5 @@
//
//  MASAttribute.m
//  MASViewAttribute.m
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.h
old mode 100644 new mode 100755
@@ -1,5 +1,5 @@
//
//  MASConstraint.h
//  MASViewConstraint.h
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.m
old mode 100644 new mode 100755
@@ -1,5 +1,5 @@
//
//  MASConstraint.m
//  MASViewConstraint.m
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
@@ -86,7 +86,7 @@
- (void)setLayoutConstant:(CGFloat)layoutConstant {
    _layoutConstant = layoutConstant;
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
    if (self.useAnimator) {
        [self.layoutConstraint.animator setConstant:layoutConstant];
    } else {
@@ -175,6 +175,7 @@
            NSMutableArray *children = NSMutableArray.new;
            for (id attr in attribute) {
                MASViewConstraint *viewConstraint = [self copy];
                viewConstraint.layoutRelation = relation;
                viewConstraint.secondViewAttribute = attr;
                [children addObject:viewConstraint];
            }
@@ -211,7 +212,7 @@
#pragma mark - Animator proxy
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
- (MASConstraint *)animator {
    self.useAnimator = YES;
@@ -253,6 +254,10 @@
    }
}
- (void)setInset:(CGFloat)inset {
    [self setInsets:(MASEdgeInsets){.top = inset, .left = inset, .bottom = inset, .right = inset}];
}
- (void)setOffset:(CGFloat)offset {
    self.layoutConstant = offset;
}
@@ -288,28 +293,21 @@
#pragma mark - MASConstraint
- (void)activate {
    if ([self supportsActiveProperty] && self.layoutConstraint) {
        if (self.hasBeenInstalled) {
            return;
        }
        self.layoutConstraint.active = YES;
        [self.firstViewAttribute.view.mas_installedConstraints addObject:self];
    } else {
        [self install];
    }
    [self install];
}
- (void)deactivate {
    if ([self supportsActiveProperty]) {
        self.layoutConstraint.active = NO;
        [self.firstViewAttribute.view.mas_installedConstraints removeObject:self];
    } else {
        [self uninstall];
    }
    [self uninstall];
}
- (void)install {
    if (self.hasBeenInstalled) {
        return;
    }
    if ([self supportsActiveProperty] && self.layoutConstraint) {
        self.layoutConstraint.active = YES;
        [self.firstViewAttribute.view.mas_installedConstraints addObject:self];
        return;
    }
    
@@ -387,6 +385,12 @@
}
- (void)uninstall {
    if ([self supportsActiveProperty]) {
        self.layoutConstraint.active = NO;
        [self.firstViewAttribute.view.mas_installedConstraints removeObject:self];
        return;
    }
    [self.installedView removeConstraint:self.layoutConstraint];
    self.layoutConstraint = nil;
    self.installedView = nil;
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/Masonry.h
old mode 100644 new mode 100755
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.h
old mode 100644 new mode 100755
@@ -25,7 +25,7 @@
 *
 *  @return Array of created MASConstraints
 */
- (NSArray *)mas_makeConstraints:(void (^)(MASConstraintMaker *make))block;
- (NSArray *)mas_makeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
/**
 *  Creates a MASConstraintMaker with each view in the callee.
@@ -36,7 +36,7 @@
 *
 *  @return Array of created/updated MASConstraints
 */
- (NSArray *)mas_updateConstraints:(void (^)(MASConstraintMaker *make))block;
- (NSArray *)mas_updateConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
/**
 *  Creates a MASConstraintMaker with each view in the callee.
@@ -47,7 +47,7 @@
 *
 *  @return Array of created/updated MASConstraints
 */
- (NSArray *)mas_remakeConstraints:(void (^)(MASConstraintMaker *make))block;
- (NSArray *)mas_remakeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
/**
 *  distribute with fixed spacing
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.m
old mode 100644 new mode 100755
@@ -48,12 +48,12 @@
    if (axisType == MASAxisTypeHorizontal) {
        MAS_VIEW *prev;
        for (int i = 0; i < self.count; i++) {
            MAS_VIEW *v = [self objectAtIndex:i];
            MAS_VIEW *v = self[i];
            [v mas_makeConstraints:^(MASConstraintMaker *make) {
                if (prev) {
                    make.width.equalTo(prev);
                    make.left.equalTo(prev.mas_right).offset(fixedSpacing);
                    if (i == (CGFloat)self.count - 1) {//last one
                    if (i == self.count - 1) {//last one
                        make.right.equalTo(tempSuperView).offset(-tailSpacing);
                    }
                }
@@ -68,12 +68,12 @@
    else {
        MAS_VIEW *prev;
        for (int i = 0; i < self.count; i++) {
            MAS_VIEW *v = [self objectAtIndex:i];
            MAS_VIEW *v = self[i];
            [v mas_makeConstraints:^(MASConstraintMaker *make) {
                if (prev) {
                    make.height.equalTo(prev);
                    make.top.equalTo(prev.mas_bottom).offset(fixedSpacing);
                    if (i == (CGFloat)self.count - 1) {//last one
                    if (i == self.count - 1) {//last one
                        make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
                    }                    
                }
@@ -97,21 +97,20 @@
    if (axisType == MASAxisTypeHorizontal) {
        MAS_VIEW *prev;
        for (int i = 0; i < self.count; i++) {
            MAS_VIEW *v = [self objectAtIndex:i];
            MAS_VIEW *v = self[i];
            [v mas_makeConstraints:^(MASConstraintMaker *make) {
                make.width.equalTo(@(fixedItemLength));
                if (prev) {
                    CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                    make.width.equalTo(@(fixedItemLength));
                    if (i == (CGFloat)self.count - 1) {//last one
                    if (i == self.count - 1) {//last one
                        make.right.equalTo(tempSuperView).offset(-tailSpacing);
                    }
                    else {
                        CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                        make.right.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset);
                    }
                }
                else {//first one
                    make.left.equalTo(tempSuperView).offset(leadSpacing);
                    make.width.equalTo(@(fixedItemLength));
                }
            }];
            prev = v;
@@ -120,21 +119,20 @@
    else {
        MAS_VIEW *prev;
        for (int i = 0; i < self.count; i++) {
            MAS_VIEW *v = [self objectAtIndex:i];
            MAS_VIEW *v = self[i];
            [v mas_makeConstraints:^(MASConstraintMaker *make) {
                make.height.equalTo(@(fixedItemLength));
                if (prev) {
                    CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                    make.height.equalTo(@(fixedItemLength));
                    if (i == (CGFloat)self.count - 1) {//last one
                    if (i == self.count - 1) {//last one
                        make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
                    }
                    else {
                        CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                        make.bottom.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset);
                    }
                }
                else {//first one
                    make.top.equalTo(tempSuperView).offset(leadSpacing);
                    make.height.equalTo(@(fixedItemLength));
                }
            }];
            prev = v;
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASShorthandAdditions.h
old mode 100644 new mode 100755
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.h
old mode 100644 new mode 100755
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m
old mode 100644 new mode 100755
@@ -44,7 +44,12 @@
            @(NSLayoutAttributeCenterY)  : @"centerY",
            @(NSLayoutAttributeBaseline) : @"baseline",
            
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
            @(NSLayoutAttributeFirstBaseline) : @"firstBaseline",
            @(NSLayoutAttributeLastBaseline) : @"lastBaseline",
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
            @(NSLayoutAttributeLeftMargin)           : @"leftMargin",
            @(NSLayoutAttributeRightMargin)          : @"rightMargin",
            @(NSLayoutAttributeTopMargin)            : @"topMargin",
@@ -66,7 +71,7 @@
    static dispatch_once_t once;
    static NSDictionary *descriptionMap;
    dispatch_once(&once, ^{
#if TARGET_OS_IPHONE
#if TARGET_OS_IPHONE || TARGET_OS_TV
        descriptionMap = @{
            @(MASLayoutPriorityDefaultHigh)      : @"high",
            @(MASLayoutPriorityDefaultLow)       : @"low",
@@ -106,16 +111,16 @@
    [description appendFormat:@" %@", [self.class descriptionForObject:self.firstItem]];
    if (self.firstAttribute != NSLayoutAttributeNotAnAttribute) {
        [description appendFormat:@".%@", [self.class.layoutAttributeDescriptionsByValue objectForKey:@(self.firstAttribute)]];
        [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.firstAttribute)]];
    }
    [description appendFormat:@" %@", [self.class.layoutRelationDescriptionsByValue objectForKey:@(self.relation)]];
    [description appendFormat:@" %@", self.class.layoutRelationDescriptionsByValue[@(self.relation)]];
    if (self.secondItem) {
        [description appendFormat:@" %@", [self.class descriptionForObject:self.secondItem]];
    }
    if (self.secondAttribute != NSLayoutAttributeNotAnAttribute) {
        [description appendFormat:@".%@", [self.class.layoutAttributeDescriptionsByValue objectForKey:@(self.secondAttribute)]];
        [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.secondAttribute)]];
    }
    
    if (self.multiplier != 1) {
@@ -131,7 +136,7 @@
    }
    if (self.priority != MASLayoutPriorityRequired) {
        [description appendFormat:@" ^%@", [self.class.layoutPriorityDescriptionsByValue objectForKey:@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]];
        [description appendFormat:@" ^%@", self.class.layoutPriorityDescriptionsByValue[@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]];
    }
    [description appendString:@">"];
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.h
old mode 100644 new mode 100755
@@ -32,7 +32,14 @@
@property (nonatomic, strong, readonly) MASViewAttribute *mas_baseline;
@property (nonatomic, strong, readonly) MASViewAttribute *(^mas_attribute)(NSLayoutAttribute attr);
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
@property (nonatomic, strong, readonly) MASViewAttribute *mas_firstBaseline;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_lastBaseline;
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
@property (nonatomic, strong, readonly) MASViewAttribute *mas_leftMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_rightMargin;
@@ -42,6 +49,16 @@
@property (nonatomic, strong, readonly) MASViewAttribute *mas_trailingMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerXWithinMargins;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerYWithinMargins;
#endif
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuide API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideTop API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideBottom API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideLeft API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideRight API_AVAILABLE(ios(11.0),tvos(11.0));
#endif
@@ -67,7 +84,7 @@
 *
 *  @return Array of created MASConstraints
 */
- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;
- (NSArray *)mas_makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
/**
 *  Creates a MASConstraintMaker with the callee view.
@@ -78,7 +95,7 @@
 *
 *  @return Array of created/updated MASConstraints
 */
- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;
- (NSArray *)mas_updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
/**
 *  Creates a MASConstraintMaker with the callee view.
@@ -89,6 +106,6 @@
 *
 *  @return Array of created/updated MASConstraints
 */
- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;
- (NSArray *)mas_remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
@end
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.m
old mode 100644 new mode 100755
@@ -87,7 +87,18 @@
    };
}
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
- (MASViewAttribute *)mas_firstBaseline {
    return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeFirstBaseline];
}
- (MASViewAttribute *)mas_lastBaseline {
    return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLastBaseline];
}
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
- (MASViewAttribute *)mas_leftMargin {
    return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeftMargin];
@@ -123,6 +134,26 @@
#endif
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
- (MASViewAttribute *)mas_safeAreaLayoutGuide {
    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
}
- (MASViewAttribute *)mas_safeAreaLayoutGuideTop {
    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeTop];
}
- (MASViewAttribute *)mas_safeAreaLayoutGuideBottom {
    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
}
- (MASViewAttribute *)mas_safeAreaLayoutGuideLeft {
    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeLeft];
}
- (MASViewAttribute *)mas_safeAreaLayoutGuideRight {
    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeRight];
}
#endif
#pragma mark - associated properties
- (id)mas_key {
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASShorthandAdditions.h
old mode 100644 new mode 100755
@@ -29,7 +29,14 @@
@property (nonatomic, strong, readonly) MASViewAttribute *baseline;
@property (nonatomic, strong, readonly) MASViewAttribute *(^attribute)(NSLayoutAttribute attr);
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
@property (nonatomic, strong, readonly) MASViewAttribute *firstBaseline;
@property (nonatomic, strong, readonly) MASViewAttribute *lastBaseline;
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
@property (nonatomic, strong, readonly) MASViewAttribute *leftMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *rightMargin;
@@ -39,6 +46,15 @@
@property (nonatomic, strong, readonly) MASViewAttribute *trailingMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *centerXWithinMargins;
@property (nonatomic, strong, readonly) MASViewAttribute *centerYWithinMargins;
#endif
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideTop API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideBottom API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideLeft API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideRight API_AVAILABLE(ios(11.0),tvos(11.0));
#endif
@@ -67,7 +83,14 @@
MAS_ATTR_FORWARD(centerY);
MAS_ATTR_FORWARD(baseline);
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
MAS_ATTR_FORWARD(firstBaseline);
MAS_ATTR_FORWARD(lastBaseline);
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
MAS_ATTR_FORWARD(leftMargin);
MAS_ATTR_FORWARD(rightMargin);
@@ -80,19 +103,28 @@
#endif
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
MAS_ATTR_FORWARD(safeAreaLayoutGuideTop);
MAS_ATTR_FORWARD(safeAreaLayoutGuideBottom);
MAS_ATTR_FORWARD(safeAreaLayoutGuideLeft);
MAS_ATTR_FORWARD(safeAreaLayoutGuideRight);
#endif
- (MASViewAttribute *(^)(NSLayoutAttribute))attribute {
    return [self mas_attribute];
}
- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block {
- (NSArray *)makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
    return [self mas_makeConstraints:block];
}
- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block {
- (NSArray *)updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
    return [self mas_updateConstraints:block];
}
- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block {
- (NSArray *)remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
    return [self mas_remakeConstraints:block];
}
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/ViewController+MASAdditions.h
old mode 100644 new mode 100755
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/ViewController+MASAdditions.m
old mode 100644 new mode 100755
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/en.lproj/EZMain.strings
@@ -1,19 +1,19 @@
"0SD-HE-m6y.text" = "9:00";
"4Eh-hh-84T.normalTitle" = "Two-Way Audio";
"4Eh-hh-84T.normalTitle" = "Intercom";
"4ol-dw-GX9.normalTitle" = "Update";
"68c-It-TWh.text" = "00:00";
"6Za-cr-nzm.title" = "Cancel";
"6yZ-4A-Vvl.title" = "Delete";
"8Y3-zX-Cnw.text" = "Device Name";
"9VU-hP-zCR.normalTitle" = "API Demo";
"9VU-hP-zCR.normalTitle" = "API D";
"9VV-np-Xv9.text" = "123456789";
"AUI-sk-GM6.text" = "PIR Event Occurred";
"Bu9-Qz-3Ij.normalTitle" = "Video in SD Card";
"E3a-LC-jG1.normalTitle" = "Cloud Storage";
"EOh-Lf-fJU.title" = "Item";
"ESG-x4-J8R.text" = "00:00";
"EWl-dl-v7z.normalTitle" = "LAN Demo";
"EWl-dl-v7z.normalTitle" = "LAN D";
"F62-D9-UTh.segmentTitles[0]" = "Me";
"F62-D9-UTh.segmentTitles[1]" = "Share";
"IqR-oy-XmU.text" = "  00:00";
@@ -34,7 +34,7 @@
"es2-2O-C6T.normalTitle" = "Record";
"fUI-tR-jyG.normalTitle" = "PTZ";
"oq1-TQ-afe.text" = "PIR Event";
"p2R-3f-bRm.normalTitle" = "Internet Demo";
"p2R-3f-bRm.normalTitle" = "Internet D";
"pg3-8C-ucI.text" = "No data.";
"r1W-d8-Rg7.placeholder" = "Input the device name.";
"ruu-Hg-3Tx.text" = "00:00";
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/EZMain.strings
@@ -20,7 +20,7 @@
/* Class = "UILabel"; text = "设备名"; ObjectID = "8Y3-zX-Cnw"; */
"8Y3-zX-Cnw.text" = "设备名";
/* Class = "UIButton"; normalTitle = "接口调用Demo"; ObjectID = "9VU-hP-zCR"; */
/* Class = "UIButton"; normalTitle = "接口调用D"; ObjectID = "9VU-hP-zCR"; */
"9VU-hP-zCR.normalTitle" = "跳转测试";
/* Class = "UILabel"; text = "123456789"; ObjectID = "9VV-np-Xv9"; */
@@ -41,8 +41,8 @@
/* Class = "UILabel"; text = "00:00"; ObjectID = "ESG-x4-J8R"; */
"ESG-x4-J8R.text" = "00:00";
/* Class = "UIButton"; normalTitle = "局域网Demo"; ObjectID = "EWl-dl-v7z"; */
"EWl-dl-v7z.normalTitle" = "局域网Demo";
/* Class = "UIButton"; normalTitle = "局域网D"; ObjectID = "EWl-dl-v7z"; */
"EWl-dl-v7z.normalTitle" = "局域网D";
/* Class = "UISegmentedControl"; F62-D9-UTh.segmentTitles[0] = "我的"; ObjectID = "F62-D9-UTh"; */
"F62-D9-UTh.segmentTitles[0]" = "我的";
@@ -104,8 +104,8 @@
/* Class = "UILabel"; text = "人体感应事件"; ObjectID = "oq1-TQ-afe"; */
"oq1-TQ-afe.text" = "人体感应事件";
/* Class = "UIButton"; normalTitle = "互联网Demo"; ObjectID = "p2R-3f-bRm"; */
"p2R-3f-bRm.normalTitle" = "互联网Demo";
/* Class = "UIButton"; normalTitle = "互联网D"; ObjectID = "p2R-3f-bRm"; */
"p2R-3f-bRm.normalTitle" = "互联网D";
/* Class = "UILabel"; text = "空空如也"; ObjectID = "pg3-8C-ucI"; */
"pg3-8C-ucI.text" = "空空如也";
Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/Localizable.strings
@@ -1,6 +1,6 @@
/* 
  Localizable.strings
  EZOpenSDKDemo
  EZOpenSDK
  Created by linyong on 2017/9/7.
  Copyright © 2017年 Ezviz. All rights reserved.
EZSDK.IOS/EZSDK.IOS/ApiDefinition.cs
@@ -15,20 +15,35 @@
        [Export("initLibWithAppKey:globalAppKey:")]
        bool InitLibWithAppKey(string appKey, string globalAppKey);
        // +(void)playBackVideo:(NSObject *)deviceInfo;
        // +(void)setEZAccessToken:(NSString *)accessToken;
        [Static]
        [Export("playBackVideo:")]
        void PlayBackVideo(NSObject deviceInfo);
        [Export("setEZAccessToken:")]
        void SetEZAccessToken(string accessToken);
        // +(void)go2EZvizMonitor;
        [Static]
        [Export("go2EZvizMonitor")]
        void Go2EZvizMonitor();
        // +(void)addEzvizMonitor;
        [Static]
        [Export("addEzvizMonitor")]
        void AddEzvizMonitor();
        // +(void)Play:(NSObject *)deviceInfo;
        [Static]
        [Export("Play:")]
        void Play(NSObject deviceInfo);
        // +(void)go2EZvizMonitor;
        // +(void)setting:(NSObject *)deviceInfo;
        [Static]
        [Export("go2EZvizMonitor")]
        void Go2EZvizMonitor();
        [Export("setting:")]
        void Setting(NSObject deviceInfo);
        // +(void)playBackVideo:(NSObject *)deviceInfo;
        [Static]
        [Export("playBackVideo:")]
        void PlayBackVideo(NSObject deviceInfo);
    }
}
EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a
Binary files differ
EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs
@@ -25,7 +25,7 @@
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
[assembly: AssemblyVersion("1.0.5")]
[assembly: AssemblyVersion("1.0.6")]
// The following attributes are used to specify the signing key for the assembly,
// if desired. See the Mono documentation for more information about signing.
EZSDK/EZSDK.xcodeproj/project.pbxproj
@@ -17,24 +17,6 @@
        B9BC999F25C0FFBD00C024FE /* DALabeledCircularProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97DF25C0FFB600C024FE /* DALabeledCircularProgressView.m */; };
        B9BC99A025C0FFBD00C024FE /* DACircularProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97E025C0FFB600C024FE /* DACircularProgressView.m */; };
        B9BC99A125C0FFBD00C024FE /* DDCollectionViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97E525C0FFB600C024FE /* DDCollectionViewFlowLayout.m */; };
        B9BC99A225C0FFBD00C024FE /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97E725C0FFB600C024FE /* UIScrollView+MJRefresh.m */; };
        B9BC99A325C0FFBD00C024FE /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97E825C0FFB600C024FE /* MJRefreshConst.m */; };
        B9BC99A425C0FFBD00C024FE /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97ED25C0FFB600C024FE /* UIScrollView+MJExtension.m */; };
        B9BC99A525C0FFBD00C024FE /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97F025C0FFB600C024FE /* UIView+MJExtension.m */; };
        B9BC99A625C0FFBD00C024FE /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97F725C0FFB600C024FE /* MJRefreshBackGifFooter.m */; };
        B9BC99A725C0FFBD00C024FE /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97F825C0FFB600C024FE /* MJRefreshBackStateFooter.m */; };
        B9BC99A825C0FFBD00C024FE /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97F925C0FFB600C024FE /* MJRefreshBackNormalFooter.m */; };
        B9BC99A925C0FFBD00C024FE /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97FE25C0FFB600C024FE /* MJRefreshAutoStateFooter.m */; };
        B9BC99AA25C0FFBD00C024FE /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97FF25C0FFB600C024FE /* MJRefreshAutoGifFooter.m */; };
        B9BC99AB25C0FFBD00C024FE /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980025C0FFB600C024FE /* MJRefreshAutoNormalFooter.m */; };
        B9BC99AC25C0FFBD00C024FE /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980225C0FFB600C024FE /* MJRefreshNormalHeader.m */; };
        B9BC99AD25C0FFBD00C024FE /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980625C0FFB600C024FE /* MJRefreshStateHeader.m */; };
        B9BC99AE25C0FFBD00C024FE /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980725C0FFB600C024FE /* MJRefreshGifHeader.m */; };
        B9BC99AF25C0FFBD00C024FE /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980925C0FFB600C024FE /* MJRefreshFooter.m */; };
        B9BC99B025C0FFBD00C024FE /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980B25C0FFB600C024FE /* MJRefreshHeader.m */; };
        B9BC99B125C0FFBD00C024FE /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980D25C0FFB600C024FE /* MJRefreshBackFooter.m */; };
        B9BC99B225C0FFBD00C024FE /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980E25C0FFB600C024FE /* MJRefreshAutoFooter.m */; };
        B9BC99B325C0FFBD00C024FE /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC981025C0FFB600C024FE /* MJRefreshComponent.m */; };
        B9BC99B425C0FFBD00C024FE /* UIView+Toast.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC981525C0FFB600C024FE /* UIView+Toast.m */; };
        B9BC99B525C0FFBD00C024FE /* MWPhotoBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC981B25C0FFB700C024FE /* MWPhotoBrowser.m */; };
        B9BC99B625C0FFBD00C024FE /* MWCaptionView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC981C25C0FFB700C024FE /* MWCaptionView.m */; };
@@ -45,16 +27,6 @@
        B9BC99BB25C0FFBD00C024FE /* MWTapDetectingView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC982425C0FFB700C024FE /* MWTapDetectingView.m */; };
        B9BC99BC25C0FFBD00C024FE /* MWGridViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC982625C0FFB700C024FE /* MWGridViewController.m */; };
        B9BC99BD25C0FFBD00C024FE /* MWGridCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC982925C0FFB700C024FE /* MWGridCell.m */; };
        B9BC99BE25C0FFBD00C024FE /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC982E25C0FFB700C024FE /* NSLayoutConstraint+MASDebugAdditions.m */; };
        B9BC99BF25C0FFBD00C024FE /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC983725C0FFB700C024FE /* ViewController+MASAdditions.m */; };
        B9BC99C025C0FFBD00C024FE /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC983B25C0FFB700C024FE /* MASCompositeConstraint.m */; };
        B9BC99C125C0FFBD00C024FE /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC983C25C0FFB700C024FE /* MASConstraintMaker.m */; };
        B9BC99C225C0FFBD00C024FE /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC983D25C0FFB700C024FE /* MASLayoutConstraint.m */; };
        B9BC99C325C0FFBD00C024FE /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC983E25C0FFB700C024FE /* NSArray+MASAdditions.m */; };
        B9BC99C425C0FFBD00C024FE /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC983F25C0FFB700C024FE /* View+MASAdditions.m */; };
        B9BC99C525C0FFBD00C024FE /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC984225C0FFB700C024FE /* MASConstraint.m */; };
        B9BC99C625C0FFBD00C024FE /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC984425C0FFB700C024FE /* MASViewConstraint.m */; };
        B9BC99C725C0FFBD00C024FE /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC984525C0FFB700C024FE /* MASViewAttribute.m */; };
        B9BC99C825C0FFBD00C024FE /* UIView+DDKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC984825C0FFB700C024FE /* UIView+DDKit.m */; };
        B9BC99C925C0FFBD00C024FE /* UISegmentedControl+DDKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC984925C0FFB700C024FE /* UISegmentedControl+DDKit.m */; };
        B9BC99CA25C0FFBD00C024FE /* UIImageView+DDKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC984C25C0FFB700C024FE /* UIImageView+DDKit.m */; };
@@ -112,7 +84,6 @@
        B9BC99FE25C0FFBD00C024FE /* HIKLoadPercentView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991125C0FFBA00C024FE /* HIKLoadPercentView.m */; };
        B9BC99FF25C0FFBD00C024FE /* HIKLoadViewItem.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991425C0FFBA00C024FE /* HIKLoadViewItem.m */; };
        B9BC9A0025C0FFBD00C024FE /* HIKLoadView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991525C0FFBA00C024FE /* HIKLoadView.m */; };
        B9BC9A0125C0FFBD00C024FE /* EZPlayDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991825C0FFBA00C024FE /* EZPlayDemoViewController.m */; };
        B9BC9A0225C0FFBD00C024FE /* DeviceListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991D25C0FFBA00C024FE /* DeviceListCell.m */; };
        B9BC9A0325C0FFBD00C024FE /* CameraListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991E25C0FFBA00C024FE /* CameraListCell.m */; };
        B9BC9A0425C0FFBD00C024FE /* MessageListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991F25C0FFBA00C024FE /* MessageListCell.m */; };
@@ -152,8 +123,26 @@
        B9BC9A2725C0FFBD00C024FE /* EZAddByQRCodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC996625C0FFBB00C024FE /* EZAddByQRCodeViewController.m */; };
        B9BC9A2825C0FFBD00C024FE /* EZPlaybackViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC996A25C0FFBB00C024FE /* EZPlaybackViewController.m */; };
        B9BC9A2925C0FFBD00C024FE /* GlobalKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC997025C0FFBB00C024FE /* GlobalKit.m */; };
        B9BC9A2A25C0FFBD00C024FE /* DemoAPITableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC997225C0FFBB00C024FE /* DemoAPITableViewController.m */; };
        B9BC9A2B25C0FFBD00C024FE /* libEZOpenSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B9BC999A25C0FFBD00C024FE /* libEZOpenSDK.a */; };
        B9EA4E8525C7E806000FFDA2 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E5625C7E805000FFDA2 /* UIScrollView+MJRefresh.m */; };
        B9EA4E8625C7E806000FFDA2 /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E5725C7E805000FFDA2 /* MJRefreshConst.m */; };
        B9EA4E8725C7E806000FFDA2 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E5D25C7E805000FFDA2 /* UIScrollView+MJExtension.m */; };
        B9EA4E8825C7E806000FFDA2 /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E6025C7E805000FFDA2 /* NSBundle+MJRefresh.m */; };
        B9EA4E8925C7E806000FFDA2 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E6125C7E805000FFDA2 /* UIView+MJExtension.m */; };
        B9EA4E8A25C7E806000FFDA2 /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E6825C7E806000FFDA2 /* MJRefreshBackGifFooter.m */; };
        B9EA4E8B25C7E806000FFDA2 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E6925C7E806000FFDA2 /* MJRefreshBackStateFooter.m */; };
        B9EA4E8C25C7E806000FFDA2 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E6A25C7E806000FFDA2 /* MJRefreshBackNormalFooter.m */; };
        B9EA4E8D25C7E806000FFDA2 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E6F25C7E806000FFDA2 /* MJRefreshAutoStateFooter.m */; };
        B9EA4E8E25C7E806000FFDA2 /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7025C7E806000FFDA2 /* MJRefreshAutoGifFooter.m */; };
        B9EA4E8F25C7E806000FFDA2 /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7125C7E806000FFDA2 /* MJRefreshAutoNormalFooter.m */; };
        B9EA4E9025C7E806000FFDA2 /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7325C7E806000FFDA2 /* MJRefreshNormalHeader.m */; };
        B9EA4E9125C7E806000FFDA2 /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7725C7E806000FFDA2 /* MJRefreshStateHeader.m */; };
        B9EA4E9225C7E806000FFDA2 /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7825C7E806000FFDA2 /* MJRefreshGifHeader.m */; };
        B9EA4E9325C7E806000FFDA2 /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7A25C7E806000FFDA2 /* MJRefreshFooter.m */; };
        B9EA4E9425C7E806000FFDA2 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7C25C7E806000FFDA2 /* MJRefreshHeader.m */; };
        B9EA4E9525C7E806000FFDA2 /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7E25C7E806000FFDA2 /* MJRefreshBackFooter.m */; };
        B9EA4E9625C7E806000FFDA2 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7F25C7E806000FFDA2 /* MJRefreshAutoFooter.m */; };
        B9EA4E9725C7E806000FFDA2 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E8125C7E806000FFDA2 /* MJRefreshComponent.m */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -189,44 +178,6 @@
        B9BC97E225C0FFB600C024FE /* DACircularProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DACircularProgressView.h; sourceTree = "<group>"; };
        B9BC97E425C0FFB600C024FE /* DDCollectionViewFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDCollectionViewFlowLayout.h; sourceTree = "<group>"; };
        B9BC97E525C0FFB600C024FE /* DDCollectionViewFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDCollectionViewFlowLayout.m; sourceTree = "<group>"; };
        B9BC97E725C0FFB600C024FE /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJRefresh.m"; sourceTree = "<group>"; };
        B9BC97E825C0FFB600C024FE /* MJRefreshConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshConst.m; sourceTree = "<group>"; };
        B9BC97E925C0FFB600C024FE /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJExtension.h"; sourceTree = "<group>"; };
        B9BC97EA25C0FFB600C024FE /* MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefresh.h; sourceTree = "<group>"; };
        B9BC97EB25C0FFB600C024FE /* MJRefresh.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MJRefresh.bundle; sourceTree = "<group>"; };
        B9BC97EC25C0FFB600C024FE /* UIView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+MJExtension.h"; sourceTree = "<group>"; };
        B9BC97ED25C0FFB600C024FE /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJExtension.m"; sourceTree = "<group>"; };
        B9BC97EE25C0FFB600C024FE /* MJRefreshConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshConst.h; sourceTree = "<group>"; };
        B9BC97EF25C0FFB600C024FE /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJRefresh.h"; sourceTree = "<group>"; };
        B9BC97F025C0FFB600C024FE /* UIView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+MJExtension.m"; sourceTree = "<group>"; };
        B9BC97F425C0FFB600C024FE /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackGifFooter.h; sourceTree = "<group>"; };
        B9BC97F525C0FFB600C024FE /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackStateFooter.h; sourceTree = "<group>"; };
        B9BC97F625C0FFB600C024FE /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackNormalFooter.h; sourceTree = "<group>"; };
        B9BC97F725C0FFB600C024FE /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackGifFooter.m; sourceTree = "<group>"; };
        B9BC97F825C0FFB600C024FE /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackStateFooter.m; sourceTree = "<group>"; };
        B9BC97F925C0FFB600C024FE /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackNormalFooter.m; sourceTree = "<group>"; };
        B9BC97FB25C0FFB600C024FE /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoStateFooter.h; sourceTree = "<group>"; };
        B9BC97FC25C0FFB600C024FE /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoNormalFooter.h; sourceTree = "<group>"; };
        B9BC97FD25C0FFB600C024FE /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoGifFooter.h; sourceTree = "<group>"; };
        B9BC97FE25C0FFB600C024FE /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoStateFooter.m; sourceTree = "<group>"; };
        B9BC97FF25C0FFB600C024FE /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoGifFooter.m; sourceTree = "<group>"; };
        B9BC980025C0FFB600C024FE /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoNormalFooter.m; sourceTree = "<group>"; };
        B9BC980225C0FFB600C024FE /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshNormalHeader.m; sourceTree = "<group>"; };
        B9BC980325C0FFB600C024FE /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshStateHeader.h; sourceTree = "<group>"; };
        B9BC980425C0FFB600C024FE /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshGifHeader.h; sourceTree = "<group>"; };
        B9BC980525C0FFB600C024FE /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshNormalHeader.h; sourceTree = "<group>"; };
        B9BC980625C0FFB600C024FE /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshStateHeader.m; sourceTree = "<group>"; };
        B9BC980725C0FFB600C024FE /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshGifHeader.m; sourceTree = "<group>"; };
        B9BC980925C0FFB600C024FE /* MJRefreshFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshFooter.m; sourceTree = "<group>"; };
        B9BC980A25C0FFB600C024FE /* MJRefreshComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshComponent.h; sourceTree = "<group>"; };
        B9BC980B25C0FFB600C024FE /* MJRefreshHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshHeader.m; sourceTree = "<group>"; };
        B9BC980C25C0FFB600C024FE /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoFooter.h; sourceTree = "<group>"; };
        B9BC980D25C0FFB600C024FE /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackFooter.m; sourceTree = "<group>"; };
        B9BC980E25C0FFB600C024FE /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoFooter.m; sourceTree = "<group>"; };
        B9BC980F25C0FFB600C024FE /* MJRefreshHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshHeader.h; sourceTree = "<group>"; };
        B9BC981025C0FFB600C024FE /* MJRefreshComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshComponent.m; sourceTree = "<group>"; };
        B9BC981125C0FFB600C024FE /* MJRefreshFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshFooter.h; sourceTree = "<group>"; };
        B9BC981225C0FFB600C024FE /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackFooter.h; sourceTree = "<group>"; };
        B9BC981425C0FFB600C024FE /* UIView+Toast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+Toast.h"; sourceTree = "<group>"; };
        B9BC981525C0FFB600C024FE /* UIView+Toast.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Toast.m"; sourceTree = "<group>"; };
        B9BC981725C0FFB600C024FE /* MWTapDetectingImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWTapDetectingImageView.h; sourceTree = "<group>"; };
@@ -250,31 +201,7 @@
        B9BC982925C0FFB700C024FE /* MWGridCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWGridCell.m; sourceTree = "<group>"; };
        B9BC982A25C0FFB700C024FE /* UIImage+MWPhotoBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+MWPhotoBrowser.h"; sourceTree = "<group>"; };
        B9BC982B25C0FFB700C024FE /* MWZoomingScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWZoomingScrollView.h; sourceTree = "<group>"; };
        B9BC982D25C0FFB700C024FE /* MASCompositeConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASCompositeConstraint.h; sourceTree = "<group>"; };
        B9BC982E25C0FFB700C024FE /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = "<group>"; };
        B9BC982F25C0FFB700C024FE /* MASConstraint+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MASConstraint+Private.h"; sourceTree = "<group>"; };
        B9BC983025C0FFB700C024FE /* MASLayoutConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASLayoutConstraint.h; sourceTree = "<group>"; };
        B9BC983125C0FFB700C024FE /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MASShorthandAdditions.h"; sourceTree = "<group>"; };
        B9BC983225C0FFB700C024FE /* MASConstraintMaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASConstraintMaker.h; sourceTree = "<group>"; };
        B9BC983325C0FFB700C024FE /* View+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "View+MASAdditions.h"; sourceTree = "<group>"; };
        B9BC983425C0FFB700C024FE /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MASAdditions.h"; sourceTree = "<group>"; };
        B9BC983525C0FFB700C024FE /* MASUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASUtilities.h; sourceTree = "<group>"; };
        B9BC983625C0FFB700C024FE /* MASViewAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASViewAttribute.h; sourceTree = "<group>"; };
        B9BC983725C0FFB700C024FE /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ViewController+MASAdditions.m"; sourceTree = "<group>"; };
        B9BC983825C0FFB700C024FE /* MASViewConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASViewConstraint.h; sourceTree = "<group>"; };
        B9BC983925C0FFB700C024FE /* MASConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASConstraint.h; sourceTree = "<group>"; };
        B9BC983A25C0FFB700C024FE /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = "<group>"; };
        B9BC983B25C0FFB700C024FE /* MASCompositeConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASCompositeConstraint.m; sourceTree = "<group>"; };
        B9BC983C25C0FFB700C024FE /* MASConstraintMaker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASConstraintMaker.m; sourceTree = "<group>"; };
        B9BC983D25C0FFB700C024FE /* MASLayoutConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASLayoutConstraint.m; sourceTree = "<group>"; };
        B9BC983E25C0FFB700C024FE /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+MASAdditions.m"; sourceTree = "<group>"; };
        B9BC983F25C0FFB700C024FE /* View+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "View+MASAdditions.m"; sourceTree = "<group>"; };
        B9BC984025C0FFB700C024FE /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "View+MASShorthandAdditions.h"; sourceTree = "<group>"; };
        B9BC984125C0FFB700C024FE /* Masonry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Masonry.h; sourceTree = "<group>"; };
        B9BC984225C0FFB700C024FE /* MASConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASConstraint.m; sourceTree = "<group>"; };
        B9BC984325C0FFB700C024FE /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ViewController+MASAdditions.h"; sourceTree = "<group>"; };
        B9BC984425C0FFB700C024FE /* MASViewConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewConstraint.m; sourceTree = "<group>"; };
        B9BC984525C0FFB700C024FE /* MASViewAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewAttribute.m; sourceTree = "<group>"; };
        B9BC984825C0FFB700C024FE /* UIView+DDKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+DDKit.m"; sourceTree = "<group>"; };
        B9BC984925C0FFB700C024FE /* UISegmentedControl+DDKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UISegmentedControl+DDKit.m"; sourceTree = "<group>"; };
        B9BC984A25C0FFB700C024FE /* DDKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDKit.h; sourceTree = "<group>"; };
@@ -473,14 +400,12 @@
        B9BC991525C0FFBA00C024FE /* HIKLoadView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HIKLoadView.m; sourceTree = "<group>"; };
        B9BC991625C0FFBA00C024FE /* Toast+UIView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Toast+UIView.h"; sourceTree = "<group>"; };
        B9BC991725C0FFBA00C024FE /* EZStartPushParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZStartPushParameter.h; sourceTree = "<group>"; };
        B9BC991825C0FFBA00C024FE /* EZPlayDemoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EZPlayDemoViewController.m; sourceTree = "<group>"; };
        B9BC991A25C0FFBA00C024FE /* CameraListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraListCell.h; sourceTree = "<group>"; };
        B9BC991B25C0FFBA00C024FE /* DeviceListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceListCell.h; sourceTree = "<group>"; };
        B9BC991C25C0FFBA00C024FE /* MessageListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageListCell.h; sourceTree = "<group>"; };
        B9BC991D25C0FFBA00C024FE /* DeviceListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeviceListCell.m; sourceTree = "<group>"; };
        B9BC991E25C0FFBA00C024FE /* CameraListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraListCell.m; sourceTree = "<group>"; };
        B9BC991F25C0FFBA00C024FE /* MessageListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MessageListCell.m; sourceTree = "<group>"; };
        B9BC992125C0FFBA00C024FE /* DemoAPITableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoAPITableViewController.h; sourceTree = "<group>"; };
        B9BC992225C0FFBA00C024FE /* EZOpenSDK+EZPrivateHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EZOpenSDK+EZPrivateHeader.h"; sourceTree = "<group>"; };
        B9BC992425C0FFBA00C024FE /* EZWifiInfoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZWifiInfoViewController.h; sourceTree = "<group>"; };
        B9BC992525C0FFBA00C024FE /* EZCalendarViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZCalendarViewController.h; sourceTree = "<group>"; };
@@ -552,11 +477,9 @@
        B9BC996925C0FFBB00C024FE /* EZEncryptCameraCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZEncryptCameraCell.h; sourceTree = "<group>"; };
        B9BC996A25C0FFBB00C024FE /* EZPlaybackViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EZPlaybackViewController.m; sourceTree = "<group>"; };
        B9BC996B25C0FFBB00C024FE /* EZOfflineCameraCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZOfflineCameraCell.h; sourceTree = "<group>"; };
        B9BC996D25C0FFBB00C024FE /* EZPlayDemoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZPlayDemoViewController.h; sourceTree = "<group>"; };
        B9BC996E25C0FFBB00C024FE /* PrefixHeader.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = "<group>"; };
        B9BC997025C0FFBB00C024FE /* GlobalKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GlobalKit.m; sourceTree = "<group>"; };
        B9BC997125C0FFBB00C024FE /* GlobalKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlobalKit.h; sourceTree = "<group>"; };
        B9BC997225C0FFBB00C024FE /* DemoAPITableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoAPITableViewController.m; sourceTree = "<group>"; };
        B9BC997625C0FFBC00C024FE /* EZConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZConstants.h; sourceTree = "<group>"; };
        B9BC997725C0FFBC00C024FE /* EZHCNetDeviceSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZHCNetDeviceSDK.h; sourceTree = "<group>"; };
        B9BC997825C0FFBC00C024FE /* EZStreamPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZStreamPlayer.h; sourceTree = "<group>"; };
@@ -593,6 +516,48 @@
        B9BC999825C0FFBD00C024FE /* EZSADPDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZSADPDeviceInfo.h; sourceTree = "<group>"; };
        B9BC999925C0FFBD00C024FE /* EZStorageInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZStorageInfo.h; sourceTree = "<group>"; };
        B9BC999A25C0FFBD00C024FE /* libEZOpenSDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libEZOpenSDK.a; sourceTree = "<group>"; };
        B9EA4E5425C7E805000FFDA2 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
        B9EA4E5625C7E805000FFDA2 /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJRefresh.m"; sourceTree = "<group>"; };
        B9EA4E5725C7E805000FFDA2 /* MJRefreshConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshConst.m; sourceTree = "<group>"; };
        B9EA4E5825C7E805000FFDA2 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJExtension.h"; sourceTree = "<group>"; };
        B9EA4E5925C7E805000FFDA2 /* MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefresh.h; sourceTree = "<group>"; };
        B9EA4E5A25C7E805000FFDA2 /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+MJRefresh.h"; sourceTree = "<group>"; };
        B9EA4E5B25C7E805000FFDA2 /* MJRefresh.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MJRefresh.bundle; sourceTree = "<group>"; };
        B9EA4E5C25C7E805000FFDA2 /* UIView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+MJExtension.h"; sourceTree = "<group>"; };
        B9EA4E5D25C7E805000FFDA2 /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJExtension.m"; sourceTree = "<group>"; };
        B9EA4E5E25C7E805000FFDA2 /* MJRefreshConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshConst.h; sourceTree = "<group>"; };
        B9EA4E5F25C7E805000FFDA2 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJRefresh.h"; sourceTree = "<group>"; };
        B9EA4E6025C7E805000FFDA2 /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+MJRefresh.m"; sourceTree = "<group>"; };
        B9EA4E6125C7E805000FFDA2 /* UIView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+MJExtension.m"; sourceTree = "<group>"; };
        B9EA4E6525C7E805000FFDA2 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackGifFooter.h; sourceTree = "<group>"; };
        B9EA4E6625C7E805000FFDA2 /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackStateFooter.h; sourceTree = "<group>"; };
        B9EA4E6725C7E805000FFDA2 /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackNormalFooter.h; sourceTree = "<group>"; };
        B9EA4E6825C7E806000FFDA2 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackGifFooter.m; sourceTree = "<group>"; };
        B9EA4E6925C7E806000FFDA2 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackStateFooter.m; sourceTree = "<group>"; };
        B9EA4E6A25C7E806000FFDA2 /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackNormalFooter.m; sourceTree = "<group>"; };
        B9EA4E6C25C7E806000FFDA2 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoStateFooter.h; sourceTree = "<group>"; };
        B9EA4E6D25C7E806000FFDA2 /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoNormalFooter.h; sourceTree = "<group>"; };
        B9EA4E6E25C7E806000FFDA2 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoGifFooter.h; sourceTree = "<group>"; };
        B9EA4E6F25C7E806000FFDA2 /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoStateFooter.m; sourceTree = "<group>"; };
        B9EA4E7025C7E806000FFDA2 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoGifFooter.m; sourceTree = "<group>"; };
        B9EA4E7125C7E806000FFDA2 /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoNormalFooter.m; sourceTree = "<group>"; };
        B9EA4E7325C7E806000FFDA2 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshNormalHeader.m; sourceTree = "<group>"; };
        B9EA4E7425C7E806000FFDA2 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshStateHeader.h; sourceTree = "<group>"; };
        B9EA4E7525C7E806000FFDA2 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshGifHeader.h; sourceTree = "<group>"; };
        B9EA4E7625C7E806000FFDA2 /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshNormalHeader.h; sourceTree = "<group>"; };
        B9EA4E7725C7E806000FFDA2 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshStateHeader.m; sourceTree = "<group>"; };
        B9EA4E7825C7E806000FFDA2 /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshGifHeader.m; sourceTree = "<group>"; };
        B9EA4E7A25C7E806000FFDA2 /* MJRefreshFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshFooter.m; sourceTree = "<group>"; };
        B9EA4E7B25C7E806000FFDA2 /* MJRefreshComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshComponent.h; sourceTree = "<group>"; };
        B9EA4E7C25C7E806000FFDA2 /* MJRefreshHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshHeader.m; sourceTree = "<group>"; };
        B9EA4E7D25C7E806000FFDA2 /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoFooter.h; sourceTree = "<group>"; };
        B9EA4E7E25C7E806000FFDA2 /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackFooter.m; sourceTree = "<group>"; };
        B9EA4E7F25C7E806000FFDA2 /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoFooter.m; sourceTree = "<group>"; };
        B9EA4E8025C7E806000FFDA2 /* MJRefreshHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshHeader.h; sourceTree = "<group>"; };
        B9EA4E8125C7E806000FFDA2 /* MJRefreshComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshComponent.m; sourceTree = "<group>"; };
        B9EA4E8225C7E806000FFDA2 /* MJRefreshFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshFooter.h; sourceTree = "<group>"; };
        B9EA4E8325C7E806000FFDA2 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackFooter.h; sourceTree = "<group>"; };
        B9EA4E8425C7E806000FFDA2 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -644,15 +609,11 @@
                B9BC97D425C0FFB600C024FE /* Venders */,
                B9BC990225C0FFBA00C024FE /* CustomUI */,
                B9BC991725C0FFBA00C024FE /* EZStartPushParameter.h */,
                B9BC991825C0FFBA00C024FE /* EZPlayDemoViewController.m */,
                B9BC991925C0FFBA00C024FE /* TableViewCells */,
                B9BC992225C0FFBA00C024FE /* EZOpenSDK+EZPrivateHeader.h */,
                B9BC992325C0FFBA00C024FE /* UIViewControllers */,
                B9BC996D25C0FFBB00C024FE /* EZPlayDemoViewController.h */,
                B9BC996E25C0FFBB00C024FE /* PrefixHeader.pch */,
                B9BC996F25C0FFBB00C024FE /* Global */,
                B9BC997225C0FFBB00C024FE /* DemoAPITableViewController.m */,
                B9BC992125C0FFBA00C024FE /* DemoAPITableViewController.h */,
            );
            path = EZ;
            sourceTree = "<group>";
@@ -660,10 +621,10 @@
        B9BC97D425C0FFB600C024FE /* Venders */ = {
            isa = PBXGroup;
            children = (
                B9EA4E5325C7E805000FFDA2 /* MJRefresh */,
                B9BC97D525C0FFB600C024FE /* UITableView-FDTemplateLayoutCell */,
                B9BC97DE25C0FFB600C024FE /* DACircularProgress */,
                B9BC97E325C0FFB600C024FE /* DDCollectionViewFlowLayout */,
                B9BC97E625C0FFB600C024FE /* MJRefresh */,
                B9BC981325C0FFB600C024FE /* Toast */,
                B9BC981625C0FFB600C024FE /* MWPhotoBrowser */,
                B9BC982C25C0FFB700C024FE /* Masonry */,
@@ -713,99 +674,6 @@
            path = DDCollectionViewFlowLayout;
            sourceTree = "<group>";
        };
        B9BC97E625C0FFB600C024FE /* MJRefresh */ = {
            isa = PBXGroup;
            children = (
                B9BC97E725C0FFB600C024FE /* UIScrollView+MJRefresh.m */,
                B9BC97E825C0FFB600C024FE /* MJRefreshConst.m */,
                B9BC97E925C0FFB600C024FE /* UIScrollView+MJExtension.h */,
                B9BC97EA25C0FFB600C024FE /* MJRefresh.h */,
                B9BC97EB25C0FFB600C024FE /* MJRefresh.bundle */,
                B9BC97EC25C0FFB600C024FE /* UIView+MJExtension.h */,
                B9BC97ED25C0FFB600C024FE /* UIScrollView+MJExtension.m */,
                B9BC97EE25C0FFB600C024FE /* MJRefreshConst.h */,
                B9BC97EF25C0FFB600C024FE /* UIScrollView+MJRefresh.h */,
                B9BC97F025C0FFB600C024FE /* UIView+MJExtension.m */,
                B9BC97F125C0FFB600C024FE /* Custom */,
                B9BC980825C0FFB600C024FE /* Base */,
            );
            path = MJRefresh;
            sourceTree = "<group>";
        };
        B9BC97F125C0FFB600C024FE /* Custom */ = {
            isa = PBXGroup;
            children = (
                B9BC97F225C0FFB600C024FE /* Footer */,
                B9BC980125C0FFB600C024FE /* Header */,
            );
            path = Custom;
            sourceTree = "<group>";
        };
        B9BC97F225C0FFB600C024FE /* Footer */ = {
            isa = PBXGroup;
            children = (
                B9BC97F325C0FFB600C024FE /* Back */,
                B9BC97FA25C0FFB600C024FE /* Auto */,
            );
            path = Footer;
            sourceTree = "<group>";
        };
        B9BC97F325C0FFB600C024FE /* Back */ = {
            isa = PBXGroup;
            children = (
                B9BC97F425C0FFB600C024FE /* MJRefreshBackGifFooter.h */,
                B9BC97F525C0FFB600C024FE /* MJRefreshBackStateFooter.h */,
                B9BC97F625C0FFB600C024FE /* MJRefreshBackNormalFooter.h */,
                B9BC97F725C0FFB600C024FE /* MJRefreshBackGifFooter.m */,
                B9BC97F825C0FFB600C024FE /* MJRefreshBackStateFooter.m */,
                B9BC97F925C0FFB600C024FE /* MJRefreshBackNormalFooter.m */,
            );
            path = Back;
            sourceTree = "<group>";
        };
        B9BC97FA25C0FFB600C024FE /* Auto */ = {
            isa = PBXGroup;
            children = (
                B9BC97FB25C0FFB600C024FE /* MJRefreshAutoStateFooter.h */,
                B9BC97FC25C0FFB600C024FE /* MJRefreshAutoNormalFooter.h */,
                B9BC97FD25C0FFB600C024FE /* MJRefreshAutoGifFooter.h */,
                B9BC97FE25C0FFB600C024FE /* MJRefreshAutoStateFooter.m */,
                B9BC97FF25C0FFB600C024FE /* MJRefreshAutoGifFooter.m */,
                B9BC980025C0FFB600C024FE /* MJRefreshAutoNormalFooter.m */,
            );
            path = Auto;
            sourceTree = "<group>";
        };
        B9BC980125C0FFB600C024FE /* Header */ = {
            isa = PBXGroup;
            children = (
                B9BC980225C0FFB600C024FE /* MJRefreshNormalHeader.m */,
                B9BC980325C0FFB600C024FE /* MJRefreshStateHeader.h */,
                B9BC980425C0FFB600C024FE /* MJRefreshGifHeader.h */,
                B9BC980525C0FFB600C024FE /* MJRefreshNormalHeader.h */,
                B9BC980625C0FFB600C024FE /* MJRefreshStateHeader.m */,
                B9BC980725C0FFB600C024FE /* MJRefreshGifHeader.m */,
            );
            path = Header;
            sourceTree = "<group>";
        };
        B9BC980825C0FFB600C024FE /* Base */ = {
            isa = PBXGroup;
            children = (
                B9BC980925C0FFB600C024FE /* MJRefreshFooter.m */,
                B9BC980A25C0FFB600C024FE /* MJRefreshComponent.h */,
                B9BC980B25C0FFB600C024FE /* MJRefreshHeader.m */,
                B9BC980C25C0FFB600C024FE /* MJRefreshAutoFooter.h */,
                B9BC980D25C0FFB600C024FE /* MJRefreshBackFooter.m */,
                B9BC980E25C0FFB600C024FE /* MJRefreshAutoFooter.m */,
                B9BC980F25C0FFB600C024FE /* MJRefreshHeader.h */,
                B9BC981025C0FFB600C024FE /* MJRefreshComponent.m */,
                B9BC981125C0FFB600C024FE /* MJRefreshFooter.h */,
                B9BC981225C0FFB600C024FE /* MJRefreshBackFooter.h */,
            );
            path = Base;
            sourceTree = "<group>";
        };
        B9BC981325C0FFB600C024FE /* Toast */ = {
            isa = PBXGroup;
            children = (
@@ -846,31 +714,7 @@
        B9BC982C25C0FFB700C024FE /* Masonry */ = {
            isa = PBXGroup;
            children = (
                B9BC982D25C0FFB700C024FE /* MASCompositeConstraint.h */,
                B9BC982E25C0FFB700C024FE /* NSLayoutConstraint+MASDebugAdditions.m */,
                B9BC982F25C0FFB700C024FE /* MASConstraint+Private.h */,
                B9BC983025C0FFB700C024FE /* MASLayoutConstraint.h */,
                B9BC983125C0FFB700C024FE /* NSArray+MASShorthandAdditions.h */,
                B9BC983225C0FFB700C024FE /* MASConstraintMaker.h */,
                B9BC983325C0FFB700C024FE /* View+MASAdditions.h */,
                B9BC983425C0FFB700C024FE /* NSArray+MASAdditions.h */,
                B9BC983525C0FFB700C024FE /* MASUtilities.h */,
                B9BC983625C0FFB700C024FE /* MASViewAttribute.h */,
                B9BC983725C0FFB700C024FE /* ViewController+MASAdditions.m */,
                B9BC983825C0FFB700C024FE /* MASViewConstraint.h */,
                B9BC983925C0FFB700C024FE /* MASConstraint.h */,
                B9BC983A25C0FFB700C024FE /* NSLayoutConstraint+MASDebugAdditions.h */,
                B9BC983B25C0FFB700C024FE /* MASCompositeConstraint.m */,
                B9BC983C25C0FFB700C024FE /* MASConstraintMaker.m */,
                B9BC983D25C0FFB700C024FE /* MASLayoutConstraint.m */,
                B9BC983E25C0FFB700C024FE /* NSArray+MASAdditions.m */,
                B9BC983F25C0FFB700C024FE /* View+MASAdditions.m */,
                B9BC984025C0FFB700C024FE /* View+MASShorthandAdditions.h */,
                B9BC984125C0FFB700C024FE /* Masonry.h */,
                B9BC984225C0FFB700C024FE /* MASConstraint.m */,
                B9BC984325C0FFB700C024FE /* ViewController+MASAdditions.h */,
                B9BC984425C0FFB700C024FE /* MASViewConstraint.m */,
                B9BC984525C0FFB700C024FE /* MASViewAttribute.m */,
            );
            path = Masonry;
            sourceTree = "<group>";
@@ -1180,70 +1024,70 @@
                B9BC994925C0FFBB00C024FE /* EZDeviceTableViewController.m */,
                B9BC996025C0FFBB00C024FE /* EZLivePlayViewController.h */,
                B9BC993925C0FFBA00C024FE /* EZLivePlayViewController.m */,
                B9BC993325C0FFBA00C024FE /* EZSettingViewController.h */,
                B9BC995825C0FFBB00C024FE /* EZSettingViewController.m */,
                B9BC994025C0FFBB00C024FE /* EZPlaybackViewController.h */,
                B9BC996A25C0FFBB00C024FE /* EZPlaybackViewController.m */,
                B9BC994625C0FFBB00C024FE /* EZEditViewController.h */,
                B9BC996525C0FFBB00C024FE /* EZEditViewController.m */,
                B9BC992425C0FFBA00C024FE /* EZWifiInfoViewController.h */,
                B9BC995525C0FFBB00C024FE /* EZWifiInfoViewController.m */,
                B9BC992525C0FFBA00C024FE /* EZCalendarViewController.h */,
                B9BC995425C0FFBB00C024FE /* EZCalendarViewController.m */,
                B9BC994B25C0FFBB00C024FE /* EZLocalCameraListViewController.h */,
                B9BC992E25C0FFBA00C024FE /* EZLocalCameraListViewController.m */,
                B9BC995725C0FFBB00C024FE /* EZLocalDeviceListViewController.h */,
                B9BC993425C0FFBA00C024FE /* EZLocalDeviceListViewController.m */,
                B9BC995025C0FFBB00C024FE /* EZCameraTableViewController.h */,
                B9BC992625C0FFBA00C024FE /* EZCameraTableViewController.m */,
                B9BC993025C0FFBA00C024FE /* EZWifiTipsViewController.h */,
                B9BC994A25C0FFBB00C024FE /* EZWifiTipsViewController.m */,
                B9BC994F25C0FFBB00C024FE /* EZWifiConfigViewController.h */,
                B9BC992725C0FFBA00C024FE /* EZWifiConfigViewController.m */,
                B9BC992825C0FFBA00C024FE /* VideoTalk */,
                B9BC994E25C0FFBB00C024FE /* EZMessagePlaybackViewController.h */,
                B9BC992B25C0FFBA00C024FE /* EZMessagePlaybackViewController.m */,
                B9BC994D25C0FFBB00C024FE /* EZMultiChannelRealPlayVC.h */,
                B9BC992C25C0FFBA00C024FE /* EZMultiChannelRealPlayVC.m */,
                B9BC994C25C0FFBB00C024FE /* EZDeviceUpgradeViewController.h */,
                B9BC992D25C0FFBA00C024FE /* EZDeviceUpgradeViewController.m */,
                B9BC992E25C0FFBA00C024FE /* EZLocalCameraListViewController.m */,
                B9BC994825C0FFBB00C024FE /* UIViewController+EZBackPop.h */,
                B9BC993025C0FFBA00C024FE /* EZWifiTipsViewController.h */,
                B9BC993125C0FFBA00C024FE /* UIViewController+EZBackPop.m */,
                B9BC993225C0FFBA00C024FE /* EZDdnsDeviceTableViewController.h */,
                B9BC993325C0FFBA00C024FE /* EZSettingViewController.h */,
                B9BC993425C0FFBA00C024FE /* EZLocalDeviceListViewController.m */,
                B9BC995925C0FFBB00C024FE /* EZDdnsDeviceTableViewController.m */,
                B9BC995625C0FFBB00C024FE /* EZDeviceResultViewController.h */,
                B9BC993525C0FFBA00C024FE /* EZDeviceResultViewController.m */,
                B9BC993625C0FFBA00C024FE /* UIAlertController+TextField.h */,
                B9BC996325C0FFBB00C024FE /* UIAlertController+TextField.m */,
                B9BC996225C0FFBB00C024FE /* EZMessagePhotoViewController.h */,
                B9BC993725C0FFBA00C024FE /* EZMessagePhotoViewController.m */,
                B9BC996125C0FFBB00C024FE /* EZDeviceRestartTipsViewController.h */,
                B9BC993825C0FFBA00C024FE /* EZDeviceRestartTipsViewController.m */,
                B9BC995F25C0FFBB00C024FE /* EZLocalRealPlayViewController.h */,
                B9BC993A25C0FFBA00C024FE /* EZLocalRealPlayViewController.m */,
                B9BC993B25C0FFBA00C024FE /* EZMessageListViewController.h */,
                B9BC995E25C0FFBB00C024FE /* EZMessageListViewController.m */,
                B9BC993C25C0FFBB00C024FE /* UINavigationController+EZOpenSDK.h */,
                B9BC995D25C0FFBB00C024FE /* UINavigationController+EZOpenSDK.m */,
                B9BC995C25C0FFBB00C024FE /* EZInputSerialViewController.h */,
                B9BC993D25C0FFBB00C024FE /* EZInputSerialViewController.m */,
                B9BC995B25C0FFBB00C024FE /* EZLocationAlertVCViewController.m */,
                B9BC993E25C0FFBB00C024FE /* EZLocationAlertVCViewController.h */,
                B9BC995A25C0FFBB00C024FE /* EZAPConfigResultViewController.h */,
                B9BC993F25C0FFBB00C024FE /* EZAPConfigResultViewController.m */,
                B9BC994025C0FFBB00C024FE /* EZPlaybackViewController.h */,
                B9BC994725C0FFBB00C024FE /* EZOnlineCameraCell.h */,
                B9BC994125C0FFBB00C024FE /* EZOfflineCameraCell.m */,
                B9BC996925C0FFBB00C024FE /* EZEncryptCameraCell.h */,
                B9BC994225C0FFBB00C024FE /* EZEncryptCameraCell.m */,
                B9BC996B25C0FFBB00C024FE /* EZOfflineCameraCell.h */,
                B9BC996425C0FFBB00C024FE /* EZOnlineCameraCell.m */,
                B9BC996825C0FFBB00C024FE /* EZHubDebugViewController.h */,
                B9BC994325C0FFBB00C024FE /* EZHubDebugViewController.m */,
                B9BC996725C0FFBB00C024FE /* EZAPWiFiConfigViewController.h */,
                B9BC994425C0FFBB00C024FE /* EZAPWiFiConfigViewController.m */,
                B9BC994525C0FFBB00C024FE /* EZAddByQRCodeViewController.h */,
                B9BC994625C0FFBB00C024FE /* EZEditViewController.h */,
                B9BC994725C0FFBB00C024FE /* EZOnlineCameraCell.h */,
                B9BC994A25C0FFBB00C024FE /* EZWifiTipsViewController.m */,
                B9BC994B25C0FFBB00C024FE /* EZLocalCameraListViewController.h */,
                B9BC994C25C0FFBB00C024FE /* EZDeviceUpgradeViewController.h */,
                B9BC994D25C0FFBB00C024FE /* EZMultiChannelRealPlayVC.h */,
                B9BC994E25C0FFBB00C024FE /* EZMessagePlaybackViewController.h */,
                B9BC994F25C0FFBB00C024FE /* EZWifiConfigViewController.h */,
                B9BC995025C0FFBB00C024FE /* EZCameraTableViewController.h */,
                B9BC995125C0FFBB00C024FE /* Support */,
                B9BC995425C0FFBB00C024FE /* EZCalendarViewController.m */,
                B9BC995525C0FFBB00C024FE /* EZWifiInfoViewController.m */,
                B9BC995625C0FFBB00C024FE /* EZDeviceResultViewController.h */,
                B9BC995725C0FFBB00C024FE /* EZLocalDeviceListViewController.h */,
                B9BC995825C0FFBB00C024FE /* EZSettingViewController.m */,
                B9BC995925C0FFBB00C024FE /* EZDdnsDeviceTableViewController.m */,
                B9BC995A25C0FFBB00C024FE /* EZAPConfigResultViewController.h */,
                B9BC995B25C0FFBB00C024FE /* EZLocationAlertVCViewController.m */,
                B9BC995C25C0FFBB00C024FE /* EZInputSerialViewController.h */,
                B9BC995D25C0FFBB00C024FE /* UINavigationController+EZOpenSDK.m */,
                B9BC995E25C0FFBB00C024FE /* EZMessageListViewController.m */,
                B9BC995F25C0FFBB00C024FE /* EZLocalRealPlayViewController.h */,
                B9BC996125C0FFBB00C024FE /* EZDeviceRestartTipsViewController.h */,
                B9BC996225C0FFBB00C024FE /* EZMessagePhotoViewController.h */,
                B9BC996325C0FFBB00C024FE /* UIAlertController+TextField.m */,
                B9BC996425C0FFBB00C024FE /* EZOnlineCameraCell.m */,
                B9BC996525C0FFBB00C024FE /* EZEditViewController.m */,
                B9BC996625C0FFBB00C024FE /* EZAddByQRCodeViewController.m */,
                B9BC996725C0FFBB00C024FE /* EZAPWiFiConfigViewController.h */,
                B9BC996825C0FFBB00C024FE /* EZHubDebugViewController.h */,
                B9BC996925C0FFBB00C024FE /* EZEncryptCameraCell.h */,
                B9BC996A25C0FFBB00C024FE /* EZPlaybackViewController.m */,
                B9BC996B25C0FFBB00C024FE /* EZOfflineCameraCell.h */,
                B9BC995125C0FFBB00C024FE /* Support */,
            );
            path = UIViewControllers;
            sourceTree = "<group>";
@@ -1334,6 +1178,111 @@
            path = modules;
            sourceTree = "<group>";
        };
        B9EA4E5325C7E805000FFDA2 /* MJRefresh */ = {
            isa = PBXGroup;
            children = (
                B9EA4E5425C7E805000FFDA2 /* LICENSE */,
                B9EA4E5525C7E805000FFDA2 /* MJRefresh */,
                B9EA4E8425C7E806000FFDA2 /* README.md */,
            );
            path = MJRefresh;
            sourceTree = "<group>";
        };
        B9EA4E5525C7E805000FFDA2 /* MJRefresh */ = {
            isa = PBXGroup;
            children = (
                B9EA4E5625C7E805000FFDA2 /* UIScrollView+MJRefresh.m */,
                B9EA4E5725C7E805000FFDA2 /* MJRefreshConst.m */,
                B9EA4E5825C7E805000FFDA2 /* UIScrollView+MJExtension.h */,
                B9EA4E5925C7E805000FFDA2 /* MJRefresh.h */,
                B9EA4E5A25C7E805000FFDA2 /* NSBundle+MJRefresh.h */,
                B9EA4E5B25C7E805000FFDA2 /* MJRefresh.bundle */,
                B9EA4E5C25C7E805000FFDA2 /* UIView+MJExtension.h */,
                B9EA4E5D25C7E805000FFDA2 /* UIScrollView+MJExtension.m */,
                B9EA4E5E25C7E805000FFDA2 /* MJRefreshConst.h */,
                B9EA4E5F25C7E805000FFDA2 /* UIScrollView+MJRefresh.h */,
                B9EA4E6025C7E805000FFDA2 /* NSBundle+MJRefresh.m */,
                B9EA4E6125C7E805000FFDA2 /* UIView+MJExtension.m */,
                B9EA4E6225C7E805000FFDA2 /* Custom */,
                B9EA4E7925C7E806000FFDA2 /* Base */,
            );
            path = MJRefresh;
            sourceTree = "<group>";
        };
        B9EA4E6225C7E805000FFDA2 /* Custom */ = {
            isa = PBXGroup;
            children = (
                B9EA4E6325C7E805000FFDA2 /* Footer */,
                B9EA4E7225C7E806000FFDA2 /* Header */,
            );
            path = Custom;
            sourceTree = "<group>";
        };
        B9EA4E6325C7E805000FFDA2 /* Footer */ = {
            isa = PBXGroup;
            children = (
                B9EA4E6425C7E805000FFDA2 /* Back */,
                B9EA4E6B25C7E806000FFDA2 /* Auto */,
            );
            path = Footer;
            sourceTree = "<group>";
        };
        B9EA4E6425C7E805000FFDA2 /* Back */ = {
            isa = PBXGroup;
            children = (
                B9EA4E6525C7E805000FFDA2 /* MJRefreshBackGifFooter.h */,
                B9EA4E6625C7E805000FFDA2 /* MJRefreshBackStateFooter.h */,
                B9EA4E6725C7E805000FFDA2 /* MJRefreshBackNormalFooter.h */,
                B9EA4E6825C7E806000FFDA2 /* MJRefreshBackGifFooter.m */,
                B9EA4E6925C7E806000FFDA2 /* MJRefreshBackStateFooter.m */,
                B9EA4E6A25C7E806000FFDA2 /* MJRefreshBackNormalFooter.m */,
            );
            path = Back;
            sourceTree = "<group>";
        };
        B9EA4E6B25C7E806000FFDA2 /* Auto */ = {
            isa = PBXGroup;
            children = (
                B9EA4E6C25C7E806000FFDA2 /* MJRefreshAutoStateFooter.h */,
                B9EA4E6D25C7E806000FFDA2 /* MJRefreshAutoNormalFooter.h */,
                B9EA4E6E25C7E806000FFDA2 /* MJRefreshAutoGifFooter.h */,
                B9EA4E6F25C7E806000FFDA2 /* MJRefreshAutoStateFooter.m */,
                B9EA4E7025C7E806000FFDA2 /* MJRefreshAutoGifFooter.m */,
                B9EA4E7125C7E806000FFDA2 /* MJRefreshAutoNormalFooter.m */,
            );
            path = Auto;
            sourceTree = "<group>";
        };
        B9EA4E7225C7E806000FFDA2 /* Header */ = {
            isa = PBXGroup;
            children = (
                B9EA4E7325C7E806000FFDA2 /* MJRefreshNormalHeader.m */,
                B9EA4E7425C7E806000FFDA2 /* MJRefreshStateHeader.h */,
                B9EA4E7525C7E806000FFDA2 /* MJRefreshGifHeader.h */,
                B9EA4E7625C7E806000FFDA2 /* MJRefreshNormalHeader.h */,
                B9EA4E7725C7E806000FFDA2 /* MJRefreshStateHeader.m */,
                B9EA4E7825C7E806000FFDA2 /* MJRefreshGifHeader.m */,
            );
            path = Header;
            sourceTree = "<group>";
        };
        B9EA4E7925C7E806000FFDA2 /* Base */ = {
            isa = PBXGroup;
            children = (
                B9EA4E7A25C7E806000FFDA2 /* MJRefreshFooter.m */,
                B9EA4E7B25C7E806000FFDA2 /* MJRefreshComponent.h */,
                B9EA4E7C25C7E806000FFDA2 /* MJRefreshHeader.m */,
                B9EA4E7D25C7E806000FFDA2 /* MJRefreshAutoFooter.h */,
                B9EA4E7E25C7E806000FFDA2 /* MJRefreshBackFooter.m */,
                B9EA4E7F25C7E806000FFDA2 /* MJRefreshAutoFooter.m */,
                B9EA4E8025C7E806000FFDA2 /* MJRefreshHeader.h */,
                B9EA4E8125C7E806000FFDA2 /* MJRefreshComponent.m */,
                B9EA4E8225C7E806000FFDA2 /* MJRefreshFooter.h */,
                B9EA4E8325C7E806000FFDA2 /* MJRefreshBackFooter.h */,
            );
            path = Base;
            sourceTree = "<group>";
        };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -1390,32 +1339,27 @@
            isa = PBXSourcesBuildPhase;
            buildActionMask = 2147483647;
            files = (
                B9BC99AB25C0FFBD00C024FE /* MJRefreshAutoNormalFooter.m in Sources */,
                B9BC99AF25C0FFBD00C024FE /* MJRefreshFooter.m in Sources */,
                B9BC99D225C0FFBD00C024FE /* UIButton+DDKit.m in Sources */,
                B9BC99A425C0FFBD00C024FE /* UIScrollView+MJExtension.m in Sources */,
                B9EA4E9325C7E806000FFDA2 /* MJRefreshFooter.m in Sources */,
                B9BC99F125C0FFBD00C024FE /* UIImageView+WebCache.m in Sources */,
                B9BC99DA25C0FFBD00C024FE /* AFURLResponseSerialization.m in Sources */,
                B9BC99D525C0FFBD00C024FE /* UIRefreshControl+AFNetworking.m in Sources */,
                B9BC99D425C0FFBD00C024FE /* UIProgressView+AFNetworking.m in Sources */,
                B9BC99AA25C0FFBD00C024FE /* MJRefreshAutoGifFooter.m in Sources */,
                B9BC9A0025C0FFBD00C024FE /* HIKLoadView.m in Sources */,
                B9EA4E8D25C7E806000FFDA2 /* MJRefreshAutoStateFooter.m in Sources */,
                B9BC99E225C0FFBD00C024FE /* AFSecurityPolicy.m in Sources */,
                B9BC99C025C0FFBD00C024FE /* MASCompositeConstraint.m in Sources */,
                B9BC99F025C0FFBD00C024FE /* NSData+ImageContentType.m in Sources */,
                B9BC99B425C0FFBD00C024FE /* UIView+Toast.m in Sources */,
                B9BC99C925C0FFBD00C024FE /* UISegmentedControl+DDKit.m in Sources */,
                B9BC99C325C0FFBD00C024FE /* NSArray+MASAdditions.m in Sources */,
                B9BC99C625C0FFBD00C024FE /* MASViewConstraint.m in Sources */,
                B9BC99DB25C0FFBD00C024FE /* AFHTTPSessionManager.m in Sources */,
                B9BC99D325C0FFBD00C024FE /* UIAlertView+AFNetworking.m in Sources */,
                B9BC99EA25C0FFBD00C024FE /* UIImage+GIF.m in Sources */,
                B9BC99C725C0FFBD00C024FE /* MASViewAttribute.m in Sources */,
                B9BC99A925C0FFBD00C024FE /* MJRefreshAutoStateFooter.m in Sources */,
                B9BC99E825C0FFBD00C024FE /* UIImageView+HighlightedWebCache.m in Sources */,
                B9EA4E8C25C7E806000FFDA2 /* MJRefreshBackNormalFooter.m in Sources */,
                B9BC9A2125C0FFBD00C024FE /* EZLocationAlertVCViewController.m in Sources */,
                B9BC99D025C0FFBD00C024FE /* UIViewController+DDKit.m in Sources */,
                B9BC99F625C0FFBD00C024FE /* Aspects.m in Sources */,
                B9EA4E8925C7E806000FFDA2 /* UIView+MJExtension.m in Sources */,
                B9BC99FA25C0FFBD00C024FE /* Toast+UIView.m in Sources */,
                B9BC9A1525C0FFBD00C024FE /* EZAPConfigResultViewController.m in Sources */,
                B9BC9A1025C0FFBD00C024FE /* EZMessagePhotoViewController.m in Sources */,
@@ -1426,39 +1370,36 @@
                B9BC9A2625C0FFBD00C024FE /* EZEditViewController.m in Sources */,
                B9BC9A2525C0FFBD00C024FE /* EZOnlineCameraCell.m in Sources */,
                B9BC999B25C0FFBD00C024FE /* UITableView+FDTemplateLayoutCell.m in Sources */,
                B9BC9A0125C0FFBD00C024FE /* EZPlayDemoViewController.m in Sources */,
                B9BC99BF25C0FFBD00C024FE /* ViewController+MASAdditions.m in Sources */,
                B9BC9A0325C0FFBD00C024FE /* CameraListCell.m in Sources */,
                B9EA4E9025C7E806000FFDA2 /* MJRefreshNormalHeader.m in Sources */,
                B9EA4E8825C7E806000FFDA2 /* NSBundle+MJRefresh.m in Sources */,
                B9EA4E8725C7E806000FFDA2 /* UIScrollView+MJExtension.m in Sources */,
                B9BC9A0225C0FFBD00C024FE /* DeviceListCell.m in Sources */,
                B9BC99C225C0FFBD00C024FE /* MASLayoutConstraint.m in Sources */,
                B9BC9A1825C0FFBD00C024FE /* EZHubDebugViewController.m in Sources */,
                B9BC9A2325C0FFBD00C024FE /* EZMessageListViewController.m in Sources */,
                B9BC99AC25C0FFBD00C024FE /* MJRefreshNormalHeader.m in Sources */,
                B9BC99B725C0FFBD00C024FE /* MWZoomingScrollView.m in Sources */,
                B9EA4E8A25C7E806000FFDA2 /* MJRefreshBackGifFooter.m in Sources */,
                B9BC99B625C0FFBD00C024FE /* MWCaptionView.m in Sources */,
                B9BC9A0B25C0FFBD00C024FE /* EZDeviceUpgradeViewController.m in Sources */,
                B9BC9A0C25C0FFBD00C024FE /* EZLocalCameraListViewController.m in Sources */,
                B9BC99B525C0FFBD00C024FE /* MWPhotoBrowser.m in Sources */,
                B9BC99C125C0FFBD00C024FE /* MASConstraintMaker.m in Sources */,
                B9BC99CD25C0FFBD00C024FE /* NSArray+DDKit.m in Sources */,
                B9BC999D25C0FFBD00C024FE /* UITableView+FDTemplateLayoutCellDebug.m in Sources */,
                B9BC999E25C0FFBD00C024FE /* UITableView+FDIndexPathHeightCache.m in Sources */,
                B9BC99F325C0FFBD00C024FE /* UIButton+WebCache.m in Sources */,
                B9BC99A825C0FFBD00C024FE /* MJRefreshBackNormalFooter.m in Sources */,
                B9BC99B925C0FFBD00C024FE /* MWTapDetectingImageView.m in Sources */,
                B9BC99DE25C0FFBD00C024FE /* AFHTTPRequestOperationManager.m in Sources */,
                B9BC99AE25C0FFBD00C024FE /* MJRefreshGifHeader.m in Sources */,
                B9BC999F25C0FFBD00C024FE /* DALabeledCircularProgressView.m in Sources */,
                B9BC99B825C0FFBD00C024FE /* UIImage+MWPhotoBrowser.m in Sources */,
                B9BC99E025C0FFBD00C024FE /* AFHTTPRequestOperation.m in Sources */,
                B9BC99CB25C0FFBD00C024FE /* UILabel+DDKit.m in Sources */,
                B9BC99F925C0FFBD00C024FE /* UIImageView+EzvizOpenSDK.m in Sources */,
                B9BC9A2425C0FFBD00C024FE /* UIAlertController+TextField.m in Sources */,
                B9EA4E9625C7E806000FFDA2 /* MJRefreshAutoFooter.m in Sources */,
                B9BC9A1225C0FFBD00C024FE /* EZLivePlayViewController.m in Sources */,
                B9BC99ED25C0FFBD00C024FE /* SDWebImagePrefetcher.m in Sources */,
                B9BC99A025C0FFBD00C024FE /* DACircularProgressView.m in Sources */,
                B9BC99CE25C0FFBD00C024FE /* NSString+DDKit.m in Sources */,
                B9BC99A625C0FFBD00C024FE /* MJRefreshBackGifFooter.m in Sources */,
                B9BC9A0825C0FFBD00C024FE /* EZVideoTalkViewcontroller.mm in Sources */,
                B9BC9A0925C0FFBD00C024FE /* EZMessagePlaybackViewController.m in Sources */,
                B9BC956225C0FC6C00C024FE /* DeviceInfo.m in Sources */,
@@ -1468,9 +1409,7 @@
                B9BC99BC25C0FFBD00C024FE /* MWGridViewController.m in Sources */,
                B9BC99EB25C0FFBD00C024FE /* UIImage+MultiFormat.m in Sources */,
                B9BC99F225C0FFBD00C024FE /* UIView+WebCacheOperation.m in Sources */,
                B9BC99C425C0FFBD00C024FE /* View+MASAdditions.m in Sources */,
                B9BC9A1425C0FFBD00C024FE /* EZInputSerialViewController.m in Sources */,
                B9BC99C525C0FFBD00C024FE /* MASConstraint.m in Sources */,
                B9BC99DD25C0FFBD00C024FE /* AFURLSessionManager.m in Sources */,
                B9BC9A1A25C0FFBD00C024FE /* EZDeviceTableViewController.m in Sources */,
                B9BC99D625C0FFBD00C024FE /* AFNetworkActivityIndicatorManager.m in Sources */,
@@ -1482,11 +1421,8 @@
                B9BC9A2825C0FFBD00C024FE /* EZPlaybackViewController.m in Sources */,
                B9BC9A1C25C0FFBD00C024FE /* EZSupportViewController.m in Sources */,
                B9BC92FF25C0FC3500C024FE /* EZSDK.m in Sources */,
                B9BC99A525C0FFBD00C024FE /* UIView+MJExtension.m in Sources */,
                B9BC99BA25C0FFBD00C024FE /* MWPhoto.m in Sources */,
                B9BC99BE25C0FFBD00C024FE /* NSLayoutConstraint+MASDebugAdditions.m in Sources */,
                B9BC9A1D25C0FFBD00C024FE /* EZCalendarViewController.m in Sources */,
                B9BC99B125C0FFBD00C024FE /* MJRefreshBackFooter.m in Sources */,
                B9BC9A2925C0FFBD00C024FE /* GlobalKit.m in Sources */,
                B9BC99E625C0FFBD00C024FE /* SDWebImageManager.m in Sources */,
                B9BC99EC25C0FFBD00C024FE /* SDWebImageCompat.m in Sources */,
@@ -1494,42 +1430,44 @@
                B9BC9A1B25C0FFBD00C024FE /* EZWifiTipsViewController.m in Sources */,
                B9BC99D925C0FFBD00C024FE /* UIActivityIndicatorView+AFNetworking.m in Sources */,
                B9BC9A0725C0FFBD00C024FE /* EZWifiConfigViewController.m in Sources */,
                B9BC99AD25C0FFBD00C024FE /* MJRefreshStateHeader.m in Sources */,
                B9BC9A1325C0FFBD00C024FE /* EZLocalRealPlayViewController.m in Sources */,
                B9BC9A2725C0FFBD00C024FE /* EZAddByQRCodeViewController.m in Sources */,
                B9BC99FC25C0FFBD00C024FE /* NSDate-Utilities.m in Sources */,
                B9BC9A0425C0FFBD00C024FE /* MessageListCell.m in Sources */,
                B9BC99B025C0FFBD00C024FE /* MJRefreshHeader.m in Sources */,
                B9EA4E8525C7E806000FFDA2 /* UIScrollView+MJRefresh.m in Sources */,
                B9BC99DF25C0FFBD00C024FE /* AFURLRequestSerialization.m in Sources */,
                B9BC99E925C0FFBD00C024FE /* SDWebImageDownloader.m in Sources */,
                B9BC99A725C0FFBD00C024FE /* MJRefreshBackStateFooter.m in Sources */,
                B9BC99FF25C0FFBD00C024FE /* HIKLoadViewItem.m in Sources */,
                B9BC99D125C0FFBD00C024FE /* NSDate+DDKit.m in Sources */,
                B9BC99B225C0FFBD00C024FE /* MJRefreshAutoFooter.m in Sources */,
                B9BC9A1625C0FFBD00C024FE /* EZOfflineCameraCell.m in Sources */,
                B9BC99CC25C0FFBD00C024FE /* UIColor+DDKit.m in Sources */,
                B9BC99DC25C0FFBD00C024FE /* AFURLConnectionOperation.m in Sources */,
                B9BC99E525C0FFBD00C024FE /* MKAnnotationView+WebCache.m in Sources */,
                B9BC9A0F25C0FFBD00C024FE /* EZDeviceResultViewController.m in Sources */,
                B9BC99E425C0FFBD00C024FE /* UIImage+WebP.m in Sources */,
                B9EA4E8E25C7E806000FFDA2 /* MJRefreshAutoGifFooter.m in Sources */,
                B9BC99FB25C0FFBD00C024FE /* EZRecordCell.m in Sources */,
                B9BC9A0625C0FFBD00C024FE /* EZCameraTableViewController.m in Sources */,
                B9BC9A2A25C0FFBD00C024FE /* DemoAPITableViewController.m in Sources */,
                B9EA4E8625C7E806000FFDA2 /* MJRefreshConst.m in Sources */,
                B9BC99FD25C0FFBD00C024FE /* HIKLoadViewItem+configPath.m in Sources */,
                B9BC99E325C0FFBD00C024FE /* MBProgressHUD.m in Sources */,
                B9BC99B325C0FFBD00C024FE /* MJRefreshComponent.m in Sources */,
                B9EA4E8F25C7E806000FFDA2 /* MJRefreshAutoNormalFooter.m in Sources */,
                B9BC99BB25C0FFBD00C024FE /* MWTapDetectingView.m in Sources */,
                B9BC99F725C0FFBD00C024FE /* EZQRView.m in Sources */,
                B9BC9A1F25C0FFBD00C024FE /* EZSettingViewController.m in Sources */,
                B9EA4E9725C7E806000FFDA2 /* MJRefreshComponent.m in Sources */,
                B9BC9A2025C0FFBD00C024FE /* EZDdnsDeviceTableViewController.m in Sources */,
                B9BC99A325C0FFBD00C024FE /* MJRefreshConst.m in Sources */,
                B9BC99CF25C0FFBD00C024FE /* UIImage+DDKit.m in Sources */,
                B9BC99A225C0FFBD00C024FE /* UIScrollView+MJRefresh.m in Sources */,
                B9BC9A0D25C0FFBD00C024FE /* UIViewController+EZBackPop.m in Sources */,
                B9EA4E9525C7E806000FFDA2 /* MJRefreshBackFooter.m in Sources */,
                B9BC9A2225C0FFBD00C024FE /* UINavigationController+EZOpenSDK.m in Sources */,
                B9BC99E725C0FFBD00C024FE /* SDWebImageDecoder.m in Sources */,
                B9EA4E9225C7E806000FFDA2 /* MJRefreshGifHeader.m in Sources */,
                B9BC99EE25C0FFBD00C024FE /* SDImageCache.m in Sources */,
                B9BC99D725C0FFBD00C024FE /* UIImageView+AFNetworking.m in Sources */,
                B9EA4E9125C7E806000FFDA2 /* MJRefreshStateHeader.m in Sources */,
                B9EA4E9425C7E806000FFDA2 /* MJRefreshHeader.m in Sources */,
                B9EA4E8B25C7E806000FFDA2 /* MJRefreshBackStateFooter.m in Sources */,
                B9BC99A125C0FFBD00C024FE /* DDCollectionViewFlowLayout.m in Sources */,
                B9BC9A1E25C0FFBD00C024FE /* EZWifiInfoViewController.m in Sources */,
                B9BC9A1925C0FFBD00C024FE /* EZAPWiFiConfigViewController.m in Sources */,
EZSDK/EZSDK/EZ/DemoAPITableViewController.h
File was deleted
EZSDK/EZSDK/EZ/DemoAPITableViewController.m
File was deleted
EZSDK/EZSDK/EZ/EZPlayDemoViewController.h
File was deleted
EZSDK/EZSDK/EZ/EZPlayDemoViewController.m
File was deleted
EZSDK/EZSDK/EZ/Global/GlobalKit.h
@@ -8,21 +8,15 @@
#import <Foundation/Foundation.h>
#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0])
#define LanguageIsChinese ([CURR_LANG rangeOfString:@"zh-Hans"].location != NSNotFound)
//#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0])
//#define LanguageIsChinese ([CURR_LANG rangeOfString:@"zh-Hans"].location != NSNotFound)
////中文走国内, 不是中文走海外
#define EZOPENSDK LanguageIsChinese ? [EZOpenSDK class] : [EZGlobalSDK class]
//中文走国内, 不是中文走海外
//2021-02-01 不考虑海外先,默认国内
#define LanguageIsChinese true
#ifdef LanguageIsChinese
#define EZOPENSDK [EZOpenSDK class]
#else
#define EZOPENSDK [EZGlobalSDK class]
#endif
@interface GlobalKit : NSObject
EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceTableViewController.m
@@ -43,9 +43,17 @@
@implementation EZDeviceTableViewController
-(void)viewWillDisappear:(BOOL)animated
{
    //    self.navigationController.navigationBarHidden = YES;//2021-02-01 添加隐藏navigationBarHidden
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)
     forBarMetrics:UIBarMetricsDefault];
    
    // Uncomment the following line to preserve selection between presentations.
    // self.clearsSelectionOnViewWillAppear = NO;
@@ -66,6 +74,9 @@
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    //    self.navigationController.navigationBarHidden = NO;//2021-02-01
    if (_needRefresh)
    {
        _needRefresh = NO;
EZSDK/EZSDK/EZ/UIViewControllers/EZEditViewController.m
@@ -23,9 +23,8 @@
    // Do any additional setup after loading the view.
    
    self.title = NSLocalizedString(@"device_modify_name_title", @"修改设备名称");
//    self.deviceNameTextField.text = self.cameraInfo.deviceName;
//
    self.deviceNameTextField.text = self.deviceInfo.deviceName;
//
//    self.deviceNameTextField.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 30)];
//    self.deviceNameTextField.leftViewMode = UITextFieldViewModeAlways;
//    [self.deviceNameTextField dd_addSeparatorWithType:ViewSeparatorTypeVerticalSide];
@@ -91,7 +90,7 @@
                      NSLog(@"error = %@",error);
                      if(!error)
                      {
//                          self.cameraInfo.deviceName = self.deviceNameTextField.text;
                          self.deviceInfo.deviceName = self.deviceNameTextField.text;
                          [self.navigationController popViewControllerAnimated:YES];
                      }
                  }];
EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m
@@ -223,11 +223,13 @@
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
//    self.navigationController.navigationBarHidden = NO;//2021-02-01
    self.ptzViewContraint.constant = self.bottomView.frame.size.height;
    self.talkViewContraint.constant = self.ptzViewContraint.constant;
}
- (void)viewWillDisappear:(BOOL)animated {
//    self.navigationController.navigationBarHidden = YES;//2021-02-01 添加隐藏navigationBarHidden
    [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(hideQualityView) object:nil];
    //结束本地录像
    if(self.localRecordButton.selected)
EZSDK/EZSDK/EZ/UIViewControllers/EZPlaybackViewController.m
@@ -559,7 +559,7 @@
        
        NSLog(@"GetStreamFetchType:%d", [self.player getStreamFetchType]);
        
        [self showStreamFetchType];
//        [self showStreamFetchType];
    }
    else if (messageCode == PLAYER_PLAYBACK_STOP)
    {
EZSDK/EZSDK/EZ/UIViewControllers/EZSettingViewController.m
@@ -142,6 +142,7 @@
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
//    self.navigationController.navigationBarHidden = NO;//2021-02-01
    [self.tableView reloadData];
}
@@ -150,7 +151,7 @@
        [_timer invalidate];
        _timer = nil;
    }
//    self.navigationController.navigationBarHidden = YES;//2021-02-01 添加隐藏navigationBarHidden
    [super viewWillDisappear:animated];
}
@@ -186,7 +187,7 @@
            make.centerY.mas_equalTo(cell.contentView.mas_centerY);
            make.height.mas_equalTo(@20);
        }];
//        self.nameLabel.text = self.cameraInfo.deviceName;
        self.nameLabel.text = self.deviceInfo.deviceName;
    }
    else if (indexPath.section == 1)
    {
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshAutoFooter.h
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshAutoFooter.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshBackFooter.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshComponent.h
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshComponent.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshFooter.h
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshFooter.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshHeader.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/LICENSE
New file
@@ -0,0 +1,19 @@
Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.h copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.h
@@ -13,8 +13,11 @@
@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用automaticallyChangeAlpha属性");
@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用triggerAutomaticallyRefreshPercent属性");
/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
/** 是否每一次拖拽只发一次请求 */
@property (assign, nonatomic, getter=isOnlyRefreshPerDrag) BOOL onlyRefreshPerDrag;
@end
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.m
@@ -9,6 +9,8 @@
#import "MJRefreshAutoFooter.h"
@interface MJRefreshAutoFooter()
/** 一个新的拖拽 */
@property (assign, nonatomic, getter=isOneNewPan) BOOL oneNewPan;
@end
@implementation MJRefreshAutoFooter
@@ -53,6 +55,9 @@
    
    // 设置为默认状态
    self.automaticallyRefresh = YES;
    // 默认是当offset达到条件就发送请求(可连续)
    self.onlyRefreshPerDrag = NO;
}
- (void)scrollViewContentSizeDidChange:(NSDictionary *)change
@@ -89,7 +94,8 @@
    
    if (self.state != MJRefreshStateIdle) return;
    
    if (_scrollView.panGestureRecognizer.state == UIGestureRecognizerStateEnded) {// 手松开
    UIGestureRecognizerState panState = _scrollView.panGestureRecognizer.state;
    if (panState == UIGestureRecognizerStateEnded) {// 手松开
        if (_scrollView.mj_insetT + _scrollView.mj_contentH <= _scrollView.mj_h) {  // 不够一个屏幕
            if (_scrollView.mj_offsetY >= - _scrollView.mj_insetT) { // 向上拽
                [self beginRefreshing];
@@ -99,7 +105,18 @@
                [self beginRefreshing];
            }
        }
    } else if (panState == UIGestureRecognizerStateBegan) {
        self.oneNewPan = YES;
    }
}
- (void)beginRefreshing
{
    if (!self.isOneNewPan && self.isOnlyRefreshPerDrag) return;
    [super beginRefreshing];
    self.oneNewPan = NO;
}
- (void)setState:(MJRefreshState)state
@@ -107,9 +124,13 @@
    MJRefreshCheckState
    
    if (state == MJRefreshStateRefreshing) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [self executeRefreshingCallback];
        });
        [self executeRefreshingCallback];
    } else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) {
        if (MJRefreshStateRefreshing == oldState) {
            if (self.endRefreshingCompletionBlock) {
                self.endRefreshingCompletionBlock();
            }
        }
    }
}
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshBackFooter.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshBackFooter.m
@@ -31,7 +31,7 @@
    // 如果正在刷新,直接返回
    if (self.state == MJRefreshStateRefreshing) return;
    
    _scrollViewOriginalInset = self.scrollView.contentInset;
    _scrollViewOriginalInset = self.scrollView.mj_inset;
    
    // 当前的contentOffset
    CGFloat currentOffsetY = self.scrollView.mj_offsetY;
@@ -95,17 +95,21 @@
                if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0;
            } completion:^(BOOL finished) {
                self.pullingPercent = 0.0;
                if (self.endRefreshingCompletionBlock) {
                    self.endRefreshingCompletionBlock();
                }
            }];
        }
        
        CGFloat deltaH = [self heightForContentBreakView];
        // 刚刷新完毕
        if (MJRefreshStateRefreshing == oldState && deltaH > 0 && self.scrollView.totalDataCount != self.lastRefreshCount) {
        if (MJRefreshStateRefreshing == oldState && deltaH > 0 && self.scrollView.mj_totalDataCount != self.lastRefreshCount) {
            self.scrollView.mj_offsetY = self.scrollView.mj_offsetY;
        }
    } else if (state == MJRefreshStateRefreshing) {
        // 记录刷新前的数量
        self.lastRefreshCount = self.scrollView.totalDataCount;
        self.lastRefreshCount = self.scrollView.mj_totalDataCount;
        
        [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
            CGFloat bottom = self.mj_h + self.scrollViewOriginalInset.bottom;
@@ -121,30 +125,6 @@
        }];
    }
}
#pragma mark - 公共方法
- (void)endRefreshing
{
    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [super endRefreshing];
        });
    } else {
        [super endRefreshing];
    }
}
- (void)noticeNoMoreData
{
    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [super noticeNoMoreData];
        });
    } else {
        [super noticeNoMoreData];
    }
}
#pragma mark - 私有方法
#pragma mark 获得scrollView的内容 超出 view 的高度
- (CGFloat)heightForContentBreakView
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.h
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.h copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.h
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.h
@@ -12,9 +12,10 @@
#import "UIView+MJExtension.h"
#import "UIScrollView+MJExtension.h"
#import "UIScrollView+MJRefresh.h"
#import "NSBundle+MJRefresh.h"
/** 刷新控件的状态 */
typedef enum {
typedef NS_ENUM(NSInteger, MJRefreshState) {
    /** 普通闲置状态 */
    MJRefreshStateIdle = 1,
    /** 松开就可以进行刷新的状态 */
@@ -25,10 +26,14 @@
    MJRefreshStateWillRefresh,
    /** 所有数据加载完毕,没有更多的数据了 */
    MJRefreshStateNoMoreData
} MJRefreshState;
};
/** 进入刷新状态的回调 */
typedef void (^MJRefreshComponentRefreshingBlock)();
typedef void (^MJRefreshComponentRefreshingBlock)(void);
/** 开始刷新后的回调(进入刷新状态后的回调) */
typedef void (^MJRefreshComponentbeginRefreshingCompletionBlock)(void);
/** 结束刷新后的回调 */
typedef void (^MJRefreshComponentEndRefreshingCompletionBlock)(void);
/** 刷新控件的基类 */
@interface MJRefreshComponent : UIView
@@ -43,6 +48,7 @@
@property (copy, nonatomic) MJRefreshComponentRefreshingBlock refreshingBlock;
/** 设置回调对象和回调方法 */
- (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action;
/** 回调对象 */
@property (weak, nonatomic) id refreshingTarget;
/** 回调方法 */
@@ -53,10 +59,17 @@
#pragma mark - 刷新状态控制
/** 进入刷新状态 */
- (void)beginRefreshing;
- (void)beginRefreshingWithCompletionBlock:(void (^)(void))completionBlock;
/** 开始刷新后的回调(进入刷新状态后的回调) */
@property (copy, nonatomic) MJRefreshComponentbeginRefreshingCompletionBlock beginRefreshingCompletionBlock;
/** 结束刷新的回调 */
@property (copy, nonatomic) MJRefreshComponentEndRefreshingCompletionBlock endRefreshingCompletionBlock;
/** 结束刷新状态 */
- (void)endRefreshing;
- (void)endRefreshingWithCompletionBlock:(void (^)(void))completionBlock;
/** 是否正在刷新 */
- (BOOL)isRefreshing;
@property (assign, nonatomic, readonly, getter=isRefreshing) BOOL refreshing;
//- (BOOL)isRefreshing;
/** 刷新状态 一般交给子类内部实现 */
@property (assign, nonatomic) MJRefreshState state;
@@ -89,5 +102,6 @@
@end
@interface UILabel(MJRefresh)
+ (instancetype)label;
+ (instancetype)mj_label;
- (CGFloat)mj_textWith;
@end
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.m
@@ -9,8 +9,6 @@
#import "MJRefreshComponent.h"
#import "MJRefreshConst.h"
#import "UIView+MJExtension.h"
#import "UIScrollView+MJRefresh.h"
@interface MJRefreshComponent()
@property (strong, nonatomic) UIPanGestureRecognizer *pan;
@@ -39,9 +37,9 @@
- (void)layoutSubviews
{
    [super layoutSubviews];
    [self placeSubviews];
    [super layoutSubviews];
}
- (void)placeSubviews{}
@@ -60,14 +58,14 @@
        // 设置宽度
        self.mj_w = newSuperview.mj_w;
        // 设置位置
        self.mj_x = 0;
        self.mj_x = -_scrollView.mj_insetL;
        
        // 记录UIScrollView
        _scrollView = (UIScrollView *)newSuperview;
        // 设置永远支持垂直弹簧效果
        _scrollView.alwaysBounceVertical = YES;
        // 记录UIScrollView最开始的contentInset
        _scrollViewOriginalInset = _scrollView.contentInset;
        _scrollViewOriginalInset = _scrollView.mj_inset;
        
        // 添加监听
        [self addObservers];
@@ -97,7 +95,7 @@
- (void)removeObservers
{
    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentOffset];
    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize];;
    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize];
    [self.pan removeObserver:self forKeyPath:MJRefreshKeyPathPanState];
    self.pan = nil;
}
@@ -133,6 +131,16 @@
    self.refreshingAction = action;
}
- (void)setState:(MJRefreshState)state
{
    _state = state;
    // 加入主队列的目的是等setState:方法调用完毕、设置完文字后再去布局子控件
    dispatch_async(dispatch_get_main_queue(), ^{
        [self setNeedsLayout];
    });
}
#pragma mark 进入刷新状态
- (void)beginRefreshing
{
@@ -144,16 +152,35 @@
    if (self.window) {
        self.state = MJRefreshStateRefreshing;
    } else {
        self.state = MJRefreshStateWillRefresh;
        // 刷新(预防从另一个控制器回到这个控制器的情况,回来要重新刷新一下)
        [self setNeedsDisplay];
        // 预防正在刷新中时,调用本方法使得header inset回置失败
        if (self.state != MJRefreshStateRefreshing) {
            self.state = MJRefreshStateWillRefresh;
            // 刷新(预防从另一个控制器回到这个控制器的情况,回来要重新刷新一下)
            [self setNeedsDisplay];
        }
    }
}
- (void)beginRefreshingWithCompletionBlock:(void (^)(void))completionBlock
{
    self.beginRefreshingCompletionBlock = completionBlock;
    [self beginRefreshing];
}
#pragma mark 结束刷新状态
- (void)endRefreshing
{
    self.state = MJRefreshStateIdle;
    dispatch_async(dispatch_get_main_queue(), ^{
        self.state = MJRefreshStateIdle;
    });
}
- (void)endRefreshingWithCompletionBlock:(void (^)(void))completionBlock
{
    self.endRefreshingCompletionBlock = completionBlock;
    [self endRefreshing];
}
#pragma mark 是否正在刷新
@@ -208,12 +235,15 @@
        if ([self.refreshingTarget respondsToSelector:self.refreshingAction]) {
            MJRefreshMsgSend(MJRefreshMsgTarget(self.refreshingTarget), self.refreshingAction, self);
        }
        if (self.beginRefreshingCompletionBlock) {
            self.beginRefreshingCompletionBlock();
        }
    });
}
@end
@implementation UILabel(MJRefresh)
+ (instancetype)label
+ (instancetype)mj_label
{
    UILabel *label = [[self alloc] init];
    label.font = MJRefreshLabelFont;
@@ -223,4 +253,24 @@
    label.backgroundColor = [UIColor clearColor];
    return label;
}
@end
- (CGFloat)mj_textWith {
    CGFloat stringWidth = 0;
    CGSize size = CGSizeMake(MAXFLOAT, MAXFLOAT);
    if (self.text.length > 0) {
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
        stringWidth =[self.text
                      boundingRectWithSize:size
                      options:NSStringDrawingUsesLineFragmentOrigin
                      attributes:@{NSFontAttributeName:self.font}
                      context:nil].size.width;
#else
        stringWidth = [self.text sizeWithFont:self.font
                             constrainedToSize:size
                                 lineBreakMode:NSLineBreakByCharWrapping].width;
#endif
    }
    return stringWidth;
}
@end
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.h
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.h copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.h
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.h
@@ -25,6 +25,6 @@
/** 忽略多少scrollView的contentInset的bottom */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom;
/** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏) */
@property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden;
/** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏。默认是NO) */
@property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden MJRefreshDeprecated("不建议使用此属性,开发者请自行控制footer的显示和隐藏。基于安全考虑,在未来的某些版本此属性可能作废");
@end
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.m
@@ -8,6 +8,7 @@
//
#import "MJRefreshFooter.h"
#include "UIScrollView+MJRefresh.h"
@interface MJRefreshFooter()
@@ -36,8 +37,8 @@
    // 设置自己的高度
    self.mj_h = MJRefreshFooterHeight;
    
    // 默认是自动隐藏
    self.automaticallyHidden = YES;
    // 默认不会自动隐藏
    self.automaticallyHidden = NO;
}
- (void)willMoveToSuperview:(UIView *)newSuperview
@@ -47,7 +48,7 @@
    if (newSuperview) {
        // 监听scrollView数据的变化
        if ([self.scrollView isKindOfClass:[UITableView class]] || [self.scrollView isKindOfClass:[UICollectionView class]]) {
            [self.scrollView setReloadDataBlock:^(NSInteger totalDataCount) {
            [self.scrollView setMj_reloadDataBlock:^(NSInteger totalDataCount) {
                if (self.isAutomaticallyHidden) {
                    self.hidden = (totalDataCount == 0);
                }
@@ -59,7 +60,9 @@
#pragma mark - 公共方法
- (void)endRefreshingWithNoMoreData
{
    self.state = MJRefreshStateNoMoreData;
    dispatch_async(dispatch_get_main_queue(), ^{
        self.state = MJRefreshStateNoMoreData;
    });
}
- (void)noticeNoMoreData
@@ -69,6 +72,13 @@
- (void)resetNoMoreData
{
    self.state = MJRefreshStateIdle;
    dispatch_async(dispatch_get_main_queue(), ^{
        self.state = MJRefreshStateIdle;
    });
}
- (void)setAutomaticallyHidden:(BOOL)automaticallyHidden
{
    _automaticallyHidden = automaticallyHidden;
}
@end
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.h
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshHeader.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshHeader.m
@@ -10,7 +10,7 @@
#import "MJRefreshHeader.h"
@interface MJRefreshHeader()
@property (assign, nonatomic) CGFloat insetTDelta;
@end
@implementation MJRefreshHeader
@@ -54,12 +54,20 @@
    
    // 在刷新的refreshing状态
    if (self.state == MJRefreshStateRefreshing) {
        // 暂时保留
        if (self.window == nil) return;
        // sectionheader停留解决
        CGFloat insetT = - self.scrollView.mj_offsetY > _scrollViewOriginalInset.top ? - self.scrollView.mj_offsetY : _scrollViewOriginalInset.top;
        insetT = insetT > self.mj_h + _scrollViewOriginalInset.top ? self.mj_h + _scrollViewOriginalInset.top : insetT;
        self.scrollView.mj_insetT = insetT;
        self.insetTDelta = _scrollViewOriginalInset.top - insetT;
        return;
    }
    
    // 跳转到下一个控制器时,contentInset可能会变
    _scrollViewOriginalInset = self.scrollView.contentInset;
     _scrollViewOriginalInset = self.scrollView.mj_inset;
    
    // 当前的contentOffset
    CGFloat offsetY = self.scrollView.mj_offsetY;
@@ -105,39 +113,35 @@
        
        // 恢复inset和offset
        [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
            self.scrollView.mj_insetT -= self.mj_h;
            self.scrollView.mj_insetT += self.insetTDelta;
            
            // 自动调整透明度
            if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0;
        } completion:^(BOOL finished) {
            self.pullingPercent = 0.0;
            if (self.endRefreshingCompletionBlock) {
                self.endRefreshingCompletionBlock();
            }
        }];
    } else if (state == MJRefreshStateRefreshing) {
        [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
            // 增加滚动区域
            CGFloat top = self.scrollViewOriginalInset.top + self.mj_h;
            self.scrollView.mj_insetT = top;
            // 设置滚动位置
            self.scrollView.mj_offsetY = - top;
        } completion:^(BOOL finished) {
            [self executeRefreshingCallback];
        }];
         dispatch_async(dispatch_get_main_queue(), ^{
            [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
                CGFloat top = self.scrollViewOriginalInset.top + self.mj_h;
                // 增加滚动区域top
                self.scrollView.mj_insetT = top;
                // 设置滚动位置
                CGPoint offset = self.scrollView.contentOffset;
                offset.y = -top;
                [self.scrollView setContentOffset:offset animated:NO];
            } completion:^(BOOL finished) {
                [self executeRefreshingCallback];
            }];
         });
    }
}
#pragma mark - 公共方法
- (void)endRefreshing
{
    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [super endRefreshing];
        });
    } else {
        [super endRefreshing];
    }
}
- (NSDate *)lastUpdatedTime
{
    return [[NSUserDefaults standardUserDefaults] objectForKey:self.lastUpdatedTimeKey];
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
@@ -9,6 +9,8 @@
#import "MJRefreshAutoStateFooter.h"
@interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter
@property (weak, nonatomic, readonly) UIImageView *gifView;
/** 设置state状态下的动画图片images 动画持续时间duration*/
- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
- (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
@@ -9,7 +9,9 @@
#import "MJRefreshAutoGifFooter.h"
@interface MJRefreshAutoGifFooter()
@property (weak, nonatomic) UIImageView *gifView;
{
    __unsafe_unretained UIImageView *_gifView;
}
/** 所有状态对应的动画图片 */
@property (strong, nonatomic) NSMutableDictionary *stateImages;
/** 所有状态对应的动画时间 */
@@ -64,16 +66,26 @@
}
#pragma mark - 实现父类的方法
- (void)prepare
{
    [super prepare];
    // 初始化间距
    self.labelLeftInset = 20;
}
- (void)placeSubviews
{
    [super placeSubviews];
    if (self.gifView.constraints.count) return;
    
    self.gifView.frame = self.bounds;
    if (self.isRefreshingTitleHidden) {
        self.gifView.contentMode = UIViewContentModeCenter;
    } else {
        self.gifView.contentMode = UIViewContentModeRight;
        self.gifView.mj_w = self.mj_w * 0.5 - 90;
        self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWith * 0.5;
    }
}
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
@@ -31,7 +31,7 @@
    self.loadingView = nil;
    [self setNeedsLayout];
}
#pragma makr - 重写父类的方法
#pragma mark - 重写父类的方法
- (void)prepare
{
    [super prepare];
@@ -43,13 +43,15 @@
{
    [super placeSubviews];
    
    if (self.loadingView.constraints.count) return;
    // 圈圈
    CGFloat arrowCenterX = self.mj_w * 0.5;
    CGFloat loadingCenterX = self.mj_w * 0.5;
    if (!self.isRefreshingTitleHidden) {
        arrowCenterX -= 100;
        loadingCenterX -= self.stateLabel.mj_textWith * 0.5 + self.labelLeftInset;
    }
    CGFloat arrowCenterY = self.mj_h * 0.5;
    self.loadingView.center = CGPointMake(arrowCenterX, arrowCenterY);
    CGFloat loadingCenterY = self.mj_h * 0.5;
    self.loadingView.center = CGPointMake(loadingCenterX, loadingCenterY);
}
- (void)setState:(MJRefreshState)state
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
@@ -9,6 +9,8 @@
#import "MJRefreshAutoFooter.h"
@interface MJRefreshAutoStateFooter : MJRefreshAutoFooter
/** 文字距离圈圈、箭头的距离 */
@property (assign, nonatomic) CGFloat labelLeftInset;
/** 显示刷新状态的label */
@property (weak, nonatomic, readonly) UILabel *stateLabel;
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
@@ -11,7 +11,7 @@
@interface MJRefreshAutoStateFooter()
{
    /** 显示刷新状态的label */
    __weak UILabel *_stateLabel;
    __unsafe_unretained UILabel *_stateLabel;
}
/** 所有状态对应的文字 */
@property (strong, nonatomic) NSMutableDictionary *stateTitles;
@@ -30,7 +30,7 @@
- (UILabel *)stateLabel
{
    if (!_stateLabel) {
        [self addSubview:_stateLabel = [UILabel label]];
        [self addSubview:_stateLabel = [UILabel mj_label]];
    }
    return _stateLabel;
}
@@ -56,10 +56,13 @@
{
    [super prepare];
    
    // 初始化间距
    self.labelLeftInset = MJRefreshLabelLeftInset;
    // 初始化文字
    [self setTitle:MJRefreshAutoFooterIdleText forState:MJRefreshStateIdle];
    [self setTitle:MJRefreshAutoFooterRefreshingText forState:MJRefreshStateRefreshing];
    [self setTitle:MJRefreshAutoFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterIdleText] forState:MJRefreshStateIdle];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterRefreshingText] forState:MJRefreshStateRefreshing];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterNoMoreDataText] forState:MJRefreshStateNoMoreData];
    
    // 监听label
    self.stateLabel.userInteractionEnabled = YES;
@@ -70,6 +73,8 @@
{
    [super placeSubviews];
    
    if (self.stateLabel.constraints.count) return;
    // 状态标签
    self.stateLabel.frame = self.bounds;
}
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
@@ -9,6 +9,8 @@
#import "MJRefreshBackStateFooter.h"
@interface MJRefreshBackGifFooter : MJRefreshBackStateFooter
@property (weak, nonatomic, readonly) UIImageView *gifView;
/** 设置state状态下的动画图片images 动画持续时间duration*/
- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
- (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
File was renamed from EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
@@ -9,7 +9,9 @@
#import "MJRefreshBackGifFooter.h"
@interface MJRefreshBackGifFooter()
@property (weak, nonatomic) UIImageView *gifView;
{
    __unsafe_unretained UIImageView *_gifView;
}
/** 所有状态对应的动画图片 */
@property (strong, nonatomic) NSMutableDictionary *stateImages;
/** 所有状态对应的动画时间 */
@@ -64,6 +66,14 @@
}
#pragma mark - 实现父类的方法
- (void)prepare
{
    [super prepare];
    // 初始化间距
    self.labelLeftInset = 20;
}
- (void)setPullingPercent:(CGFloat)pullingPercent
{
    [super setPullingPercent:pullingPercent];
@@ -79,12 +89,14 @@
{
    [super placeSubviews];
    
    if (self.gifView.constraints.count) return;
    self.gifView.frame = self.bounds;
    if (self.stateLabel.hidden) {
        self.gifView.contentMode = UIViewContentModeCenter;
    } else {
        self.gifView.contentMode = UIViewContentModeRight;
        self.gifView.mj_w = self.mj_w * 0.5 - 90;
        self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWith * 0.5;
    }
}
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
@@ -7,10 +7,11 @@
//
#import "MJRefreshBackNormalFooter.h"
#import "NSBundle+MJRefresh.h"
@interface MJRefreshBackNormalFooter()
{
    __weak UIImageView *_arrowView;
    __unsafe_unretained UIImageView *_arrowView;
}
@property (weak, nonatomic) UIActivityIndicatorView *loadingView;
@end
@@ -20,8 +21,7 @@
- (UIImageView *)arrowView
{
    if (!_arrowView) {
        UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")] ?: [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
        UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
        UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]];
        [self addSubview:_arrowView = arrowView];
    }
    return _arrowView;
@@ -45,7 +45,7 @@
    self.loadingView = nil;
    [self setNeedsLayout];
}
#pragma makr - 重写父类的方法
#pragma mark - 重写父类的方法
- (void)prepare
{
    [super prepare];
@@ -57,17 +57,26 @@
{
    [super placeSubviews];
    
    // 箭头
    self.arrowView.mj_size = self.arrowView.image.size;
    // 箭头的中心点
    CGFloat arrowCenterX = self.mj_w * 0.5;
    if (!self.stateLabel.hidden) {
        arrowCenterX -= 100;
        arrowCenterX -= self.labelLeftInset + self.stateLabel.mj_textWith * 0.5;
    }
    CGFloat arrowCenterY = self.mj_h * 0.5;
    self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY);
    CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY);
    // 箭头
    if (self.arrowView.constraints.count == 0) {
        self.arrowView.mj_size = self.arrowView.image.size;
        self.arrowView.center = arrowCenter;
    }
    
    // 圈圈
    self.loadingView.frame = self.arrowView.frame;
    if (self.loadingView.constraints.count == 0) {
        self.loadingView.center = arrowCenter;
    }
    self.arrowView.tintColor = self.stateLabel.textColor;
}
- (void)setState:(MJRefreshState)state
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
@@ -9,6 +9,8 @@
#import "MJRefreshBackFooter.h"
@interface MJRefreshBackStateFooter : MJRefreshBackFooter
/** 文字距离圈圈、箭头的距离 */
@property (assign, nonatomic) CGFloat labelLeftInset;
/** 显示刷新状态的label */
@property (weak, nonatomic, readonly) UILabel *stateLabel;
/** 设置state状态下的文字 */
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
@@ -11,7 +11,7 @@
@interface MJRefreshBackStateFooter()
{
    /** 显示刷新状态的label */
    __weak UILabel *_stateLabel;
    __unsafe_unretained UILabel *_stateLabel;
}
/** 所有状态对应的文字 */
@property (strong, nonatomic) NSMutableDictionary *stateTitles;
@@ -30,7 +30,7 @@
- (UILabel *)stateLabel
{
    if (!_stateLabel) {
        [self addSubview:_stateLabel = [UILabel label]];
        [self addSubview:_stateLabel = [UILabel mj_label]];
    }
    return _stateLabel;
}
@@ -52,17 +52,22 @@
{
    [super prepare];
    
    // 初始化间距
    self.labelLeftInset = MJRefreshLabelLeftInset;
    // 初始化文字
    [self setTitle:MJRefreshBackFooterIdleText forState:MJRefreshStateIdle];
    [self setTitle:MJRefreshBackFooterPullingText forState:MJRefreshStatePulling];
    [self setTitle:MJRefreshBackFooterRefreshingText forState:MJRefreshStateRefreshing];
    [self setTitle:MJRefreshBackFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterIdleText] forState:MJRefreshStateIdle];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterPullingText] forState:MJRefreshStatePulling];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterRefreshingText] forState:MJRefreshStateRefreshing];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterNoMoreDataText] forState:MJRefreshStateNoMoreData];
}
- (void)placeSubviews
{
    [super placeSubviews];
    
    if (self.stateLabel.constraints.count) return;
    // 状态标签
    self.stateLabel.frame = self.bounds;
}
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h
@@ -9,6 +9,8 @@
#import "MJRefreshStateHeader.h"
@interface MJRefreshGifHeader : MJRefreshStateHeader
@property (weak, nonatomic, readonly) UIImageView *gifView;
/** 设置state状态下的动画图片images 动画持续时间duration*/
- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
- (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m
@@ -9,7 +9,9 @@
#import "MJRefreshGifHeader.h"
@interface MJRefreshGifHeader()
@property (weak, nonatomic) UIImageView *gifView;
{
    __unsafe_unretained UIImageView *_gifView;
}
/** 所有状态对应的动画图片 */
@property (strong, nonatomic) NSMutableDictionary *stateImages;
/** 所有状态对应的动画时间 */
@@ -64,6 +66,14 @@
}
#pragma mark - 实现父类的方法
- (void)prepare
{
    [super prepare];
    // 初始化间距
    self.labelLeftInset = 20;
}
- (void)setPullingPercent:(CGFloat)pullingPercent
{
    [super setPullingPercent:pullingPercent];
@@ -81,12 +91,21 @@
{
    [super placeSubviews];
    
    if (self.gifView.constraints.count) return;
    self.gifView.frame = self.bounds;
    if (self.stateLabel.hidden && self.lastUpdatedTimeLabel.hidden) {
        self.gifView.contentMode = UIViewContentModeCenter;
    } else {
        self.gifView.contentMode = UIViewContentModeRight;
        self.gifView.mj_w = self.mj_w * 0.5 - 90;
        CGFloat stateWidth = self.stateLabel.mj_textWith;
        CGFloat timeWidth = 0.0;
        if (!self.lastUpdatedTimeLabel.hidden) {
            timeWidth = self.lastUpdatedTimeLabel.mj_textWith;
        }
        CGFloat textWidth = MAX(stateWidth, timeWidth);
        self.gifView.mj_w = self.mj_w * 0.5 - textWidth * 0.5 - self.labelLeftInset;
    }
}
@@ -107,6 +126,8 @@
            self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue];
            [self.gifView startAnimating];
        }
    } else if (state == MJRefreshStateIdle) {
        [self.gifView stopAnimating];
    }
}
@end
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
@@ -7,10 +7,11 @@
//
#import "MJRefreshNormalHeader.h"
#import "NSBundle+MJRefresh.h"
@interface MJRefreshNormalHeader()
{
    __weak UIImageView *_arrowView;
    __unsafe_unretained UIImageView *_arrowView;
}
@property (weak, nonatomic) UIActivityIndicatorView *loadingView;
@end
@@ -20,8 +21,7 @@
- (UIImageView *)arrowView
{
    if (!_arrowView) {
        UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")] ?: [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
        UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
        UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]];
        [self addSubview:_arrowView = arrowView];
    }
    return _arrowView;
@@ -46,7 +46,7 @@
    [self setNeedsLayout];
}
#pragma makr - 重写父类的方法
#pragma mark - 重写父类的方法
- (void)prepare
{
    [super prepare];
@@ -58,17 +58,32 @@
{
    [super placeSubviews];
    
    // 箭头
    self.arrowView.mj_size = self.arrowView.image.size;
    // 箭头的中心点
    CGFloat arrowCenterX = self.mj_w * 0.5;
    if (!self.stateLabel.hidden) {
        arrowCenterX -= 100;
        CGFloat stateWidth = self.stateLabel.mj_textWith;
        CGFloat timeWidth = 0.0;
        if (!self.lastUpdatedTimeLabel.hidden) {
            timeWidth = self.lastUpdatedTimeLabel.mj_textWith;
        }
        CGFloat textWidth = MAX(stateWidth, timeWidth);
        arrowCenterX -= textWidth / 2 + self.labelLeftInset;
    }
    CGFloat arrowCenterY = self.mj_h * 0.5;
    self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY);
    CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY);
    
    // 箭头
    if (self.arrowView.constraints.count == 0) {
        self.arrowView.mj_size = self.arrowView.image.size;
        self.arrowView.center = arrowCenter;
    }
    // 圈圈
    self.loadingView.frame = self.arrowView.frame;
    if (self.loadingView.constraints.count == 0) {
        self.loadingView.center = arrowCenter;
    }
    self.arrowView.tintColor = self.stateLabel.textColor;
}
- (void)setState:(MJRefreshState)state
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h
@@ -16,6 +16,8 @@
@property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel;
#pragma mark - 状态相关
/** 文字距离圈圈、箭头的距离 */
@property (assign, nonatomic) CGFloat labelLeftInset;
/** 显示刷新状态的label */
@property (weak, nonatomic, readonly) UILabel *stateLabel;
/** 设置state状态下的文字 */
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m
New file
@@ -0,0 +1,167 @@
//
//  MJRefreshStateHeader.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/4/24.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//
#import "MJRefreshStateHeader.h"
@interface MJRefreshStateHeader()
{
    /** 显示上一次刷新时间的label */
    __unsafe_unretained UILabel *_lastUpdatedTimeLabel;
    /** 显示刷新状态的label */
    __unsafe_unretained UILabel *_stateLabel;
}
/** 所有状态对应的文字 */
@property (strong, nonatomic) NSMutableDictionary *stateTitles;
@end
@implementation MJRefreshStateHeader
#pragma mark - 懒加载
- (NSMutableDictionary *)stateTitles
{
    if (!_stateTitles) {
        self.stateTitles = [NSMutableDictionary dictionary];
    }
    return _stateTitles;
}
- (UILabel *)stateLabel
{
    if (!_stateLabel) {
        [self addSubview:_stateLabel = [UILabel mj_label]];
    }
    return _stateLabel;
}
- (UILabel *)lastUpdatedTimeLabel
{
    if (!_lastUpdatedTimeLabel) {
        [self addSubview:_lastUpdatedTimeLabel = [UILabel mj_label]];
    }
    return _lastUpdatedTimeLabel;
}
#pragma mark - 公共方法
- (void)setTitle:(NSString *)title forState:(MJRefreshState)state
{
    if (title == nil) return;
    self.stateTitles[@(state)] = title;
    self.stateLabel.text = self.stateTitles[@(self.state)];
}
#pragma mark - 日历获取在9.x之后的系统使用currentCalendar会出异常。在8.0之后使用系统新API。
- (NSCalendar *)currentCalendar {
    if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
        return [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
    }
    return [NSCalendar currentCalendar];
}
#pragma mark key的处理
- (void)setLastUpdatedTimeKey:(NSString *)lastUpdatedTimeKey
{
    [super setLastUpdatedTimeKey:lastUpdatedTimeKey];
    // 如果label隐藏了,就不用再处理
    if (self.lastUpdatedTimeLabel.hidden) return;
    NSDate *lastUpdatedTime = [[NSUserDefaults standardUserDefaults] objectForKey:lastUpdatedTimeKey];
    // 如果有block
    if (self.lastUpdatedTimeText) {
        self.lastUpdatedTimeLabel.text = self.lastUpdatedTimeText(lastUpdatedTime);
        return;
    }
    if (lastUpdatedTime) {
        // 1.获得年月日
        NSCalendar *calendar = [self currentCalendar];
        NSUInteger unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour |NSCalendarUnitMinute;
        NSDateComponents *cmp1 = [calendar components:unitFlags fromDate:lastUpdatedTime];
        NSDateComponents *cmp2 = [calendar components:unitFlags fromDate:[NSDate date]];
        // 2.格式化日期
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        BOOL isToday = NO;
        if ([cmp1 day] == [cmp2 day]) { // 今天
            formatter.dateFormat = @" HH:mm";
            isToday = YES;
        } else if ([cmp1 year] == [cmp2 year]) { // 今年
            formatter.dateFormat = @"MM-dd HH:mm";
        } else {
            formatter.dateFormat = @"yyyy-MM-dd HH:mm";
        }
        NSString *time = [formatter stringFromDate:lastUpdatedTime];
        // 3.显示日期
        self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@%@",
                                          [NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText],
                                          isToday ? [NSBundle mj_localizedStringForKey:MJRefreshHeaderDateTodayText] : @"",
                                          time];
    } else {
        self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@",
                                          [NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText],
                                          [NSBundle mj_localizedStringForKey:MJRefreshHeaderNoneLastDateText]];
    }
}
#pragma mark - 覆盖父类的方法
- (void)prepare
{
    [super prepare];
    // 初始化间距
    self.labelLeftInset = MJRefreshLabelLeftInset;
    // 初始化文字
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderIdleText] forState:MJRefreshStateIdle];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderPullingText] forState:MJRefreshStatePulling];
    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderRefreshingText] forState:MJRefreshStateRefreshing];
}
- (void)placeSubviews
{
    [super placeSubviews];
    if (self.stateLabel.hidden) return;
    BOOL noConstrainsOnStatusLabel = self.stateLabel.constraints.count == 0;
    if (self.lastUpdatedTimeLabel.hidden) {
        // 状态
        if (noConstrainsOnStatusLabel) self.stateLabel.frame = self.bounds;
    } else {
        CGFloat stateLabelH = self.mj_h * 0.5;
        // 状态
        if (noConstrainsOnStatusLabel) {
            self.stateLabel.mj_x = 0;
            self.stateLabel.mj_y = 0;
            self.stateLabel.mj_w = self.mj_w;
            self.stateLabel.mj_h = stateLabelH;
        }
        // 更新时间
        if (self.lastUpdatedTimeLabel.constraints.count == 0) {
            self.lastUpdatedTimeLabel.mj_x = 0;
            self.lastUpdatedTimeLabel.mj_y = stateLabelH;
            self.lastUpdatedTimeLabel.mj_w = self.mj_w;
            self.lastUpdatedTimeLabel.mj_h = self.mj_h - self.lastUpdatedTimeLabel.mj_y;
        }
    }
}
- (void)setState:(MJRefreshState)state
{
    MJRefreshCheckState
    // 设置状态文字
    self.stateLabel.text = self.stateTitles[@(state)];
    // 重新设置key(重新显示时间)
    self.lastUpdatedTimeKey = self.lastUpdatedTimeKey;
}
@end
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png

EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings
Binary files differ
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings
Binary files differ
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings
New file
@@ -0,0 +1,16 @@
"MJRefreshHeaderIdleText" = "下拉可以刷新";
"MJRefreshHeaderPullingText" = "鬆開立即刷新";
"MJRefreshHeaderRefreshingText" = "正在刷新數據中...";
"MJRefreshAutoFooterIdleText" = "點擊或上拉加載更多";
"MJRefreshAutoFooterRefreshingText" = "正在加載更多的數據...";
"MJRefreshAutoFooterNoMoreDataText" = "已經全部加載完畢";
"MJRefreshBackFooterIdleText" = "上拉可以加載更多";
"MJRefreshBackFooterPullingText" = "鬆開立即加載更多";
"MJRefreshBackFooterRefreshingText" = "正在加載更多的數據...";
"MJRefreshBackFooterNoMoreDataText" = "已經全部加載完畢";
"MJRefreshHeaderLastTimeText" = "最後更新:";
"MJRefreshHeaderDateTodayText" = "今天";
"MJRefreshHeaderNoneLastDateText" = "無記錄";
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.h
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefreshConst.h
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.h copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefreshConst.h
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.h
@@ -3,6 +3,9 @@
#import <UIKit/UIKit.h>
#import <objc/message.h>
// 弱引用
#define MJWeakSelf __weak typeof(self) weakSelf = self;
// 日志输出
#ifdef DEBUG
#define MJRefreshLog(...) NSLog(__VA_ARGS__)
@@ -26,11 +29,8 @@
// 字体大小
#define MJRefreshLabelFont [UIFont boldSystemFontOfSize:14]
// 图片路径
#define MJRefreshSrcName(file) [@"MJRefresh.bundle" stringByAppendingPathComponent:file]
#define MJRefreshFrameworkSrcName(file) [@"Frameworks/MJRefresh.framework/MJRefresh.bundle" stringByAppendingPathComponent:file]
// 常量
UIKIT_EXTERN const CGFloat MJRefreshLabelLeftInset;
UIKIT_EXTERN const CGFloat MJRefreshHeaderHeight;
UIKIT_EXTERN const CGFloat MJRefreshFooterHeight;
UIKIT_EXTERN const CGFloat MJRefreshFastAnimationDuration;
@@ -56,6 +56,10 @@
UIKIT_EXTERN NSString *const MJRefreshBackFooterRefreshingText;
UIKIT_EXTERN NSString *const MJRefreshBackFooterNoMoreDataText;
UIKIT_EXTERN NSString *const MJRefreshHeaderLastTimeText;
UIKIT_EXTERN NSString *const MJRefreshHeaderDateTodayText;
UIKIT_EXTERN NSString *const MJRefreshHeaderNoneLastDateText;
// 状态检查
#define MJRefreshCheckState \
MJRefreshState oldState = self.state; \
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefreshConst.m
New file
@@ -0,0 +1,33 @@
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
#import <UIKit/UIKit.h>
const CGFloat MJRefreshLabelLeftInset = 25;
const CGFloat MJRefreshHeaderHeight = 54.0;
const CGFloat MJRefreshFooterHeight = 44.0;
const CGFloat MJRefreshFastAnimationDuration = 0.25;
const CGFloat MJRefreshSlowAnimationDuration = 0.4;
NSString *const MJRefreshKeyPathContentOffset = @"contentOffset";
NSString *const MJRefreshKeyPathContentInset = @"contentInset";
NSString *const MJRefreshKeyPathContentSize = @"contentSize";
NSString *const MJRefreshKeyPathPanState = @"state";
NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey";
NSString *const MJRefreshHeaderIdleText = @"MJRefreshHeaderIdleText";
NSString *const MJRefreshHeaderPullingText = @"MJRefreshHeaderPullingText";
NSString *const MJRefreshHeaderRefreshingText = @"MJRefreshHeaderRefreshingText";
NSString *const MJRefreshAutoFooterIdleText = @"MJRefreshAutoFooterIdleText";
NSString *const MJRefreshAutoFooterRefreshingText = @"MJRefreshAutoFooterRefreshingText";
NSString *const MJRefreshAutoFooterNoMoreDataText = @"MJRefreshAutoFooterNoMoreDataText";
NSString *const MJRefreshBackFooterIdleText = @"MJRefreshBackFooterIdleText";
NSString *const MJRefreshBackFooterPullingText = @"MJRefreshBackFooterPullingText";
NSString *const MJRefreshBackFooterRefreshingText = @"MJRefreshBackFooterRefreshingText";
NSString *const MJRefreshBackFooterNoMoreDataText = @"MJRefreshBackFooterNoMoreDataText";
NSString *const MJRefreshHeaderLastTimeText = @"MJRefreshHeaderLastTimeText";
NSString *const MJRefreshHeaderDateTodayText = @"MJRefreshHeaderDateTodayText";
NSString *const MJRefreshHeaderNoneLastDateText = @"MJRefreshHeaderNoneLastDateText";
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.h
New file
@@ -0,0 +1,16 @@
//
//  NSBundle+MJRefresh.h
//  MJRefreshExample
//
//  Created by MJ Lee on 16/6/13.
//  Copyright © 2016年 小码哥. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface NSBundle (MJRefresh)
+ (instancetype)mj_refreshBundle;
+ (UIImage *)mj_arrowImage;
+ (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value;
+ (NSString *)mj_localizedStringForKey:(NSString *)key;
@end
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.m
New file
@@ -0,0 +1,61 @@
//
//  NSBundle+MJRefresh.m
//  MJRefreshExample
//
//  Created by MJ Lee on 16/6/13.
//  Copyright © 2016年 小码哥. All rights reserved.
//
#import "NSBundle+MJRefresh.h"
#import "MJRefreshComponent.h"
@implementation NSBundle (MJRefresh)
+ (instancetype)mj_refreshBundle
{
    static NSBundle *refreshBundle = nil;
    if (refreshBundle == nil) {
        // 这里不使用mainBundle是为了适配pod 1.x和0.x
        refreshBundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[MJRefreshComponent class]] pathForResource:@"MJRefresh" ofType:@"bundle"]];
    }
    return refreshBundle;
}
+ (UIImage *)mj_arrowImage
{
    static UIImage *arrowImage = nil;
    if (arrowImage == nil) {
        arrowImage = [[UIImage imageWithContentsOfFile:[[self mj_refreshBundle] pathForResource:@"arrow@2x" ofType:@"png"]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
    }
    return arrowImage;
}
+ (NSString *)mj_localizedStringForKey:(NSString *)key
{
    return [self mj_localizedStringForKey:key value:nil];
}
+ (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value
{
    static NSBundle *bundle = nil;
    if (bundle == nil) {
        // (iOS获取的语言字符串比较不稳定)目前框架只处理en、zh-Hans、zh-Hant三种情况,其他按照系统默认处理
        NSString *language = [NSLocale preferredLanguages].firstObject;
        if ([language hasPrefix:@"en"]) {
            language = @"en";
        } else if ([language hasPrefix:@"zh"]) {
            if ([language rangeOfString:@"Hans"].location != NSNotFound) {
                language = @"zh-Hans"; // 简体中文
            } else { // zh-Hant\zh-HK\zh-TW
                language = @"zh-Hant"; // 繁體中文
            }
        } else {
            language = @"en";
        }
        // 从MJRefresh.bundle中查找资源
        bundle = [NSBundle bundleWithPath:[[NSBundle mj_refreshBundle] pathForResource:language ofType:@"lproj"]];
    }
    value = [bundle localizedStringForKey:key value:value table:nil];
    return [[NSBundle mainBundle] localizedStringForKey:key value:value table:nil];
}
@end
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.h
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.h copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.h
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.h
@@ -10,6 +10,8 @@
#import <UIKit/UIKit.h>
@interface UIScrollView (MJExtension)
@property (readonly, nonatomic) UIEdgeInsets mj_inset;
@property (assign, nonatomic) CGFloat mj_insetT;
@property (assign, nonatomic) CGFloat mj_insetB;
@property (assign, nonatomic) CGFloat mj_insetL;
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.m
@@ -10,54 +10,94 @@
#import "UIScrollView+MJExtension.h"
#import <objc/runtime.h>
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunguarded-availability-new"
@implementation UIScrollView (MJExtension)
static BOOL gt_ios_11_;
+ (void)load
{
    // 缓存判断值
    gt_ios_11_ = [[[UIDevice currentDevice] systemVersion] compare:@"11.0" options:NSNumericSearch] != NSOrderedAscending;
}
- (UIEdgeInsets)mj_inset
{
#ifdef __IPHONE_11_0
    if (gt_ios_11_) {
        return self.adjustedContentInset;
    }
#endif
    return self.contentInset;
}
- (void)setMj_insetT:(CGFloat)mj_insetT
{
    UIEdgeInsets inset = self.contentInset;
    inset.top = mj_insetT;
#ifdef __IPHONE_11_0
    if (gt_ios_11_) {
        inset.top -= (self.adjustedContentInset.top - self.contentInset.top);
    }
#endif
    self.contentInset = inset;
}
- (CGFloat)mj_insetT
{
    return self.contentInset.top;
    return self.mj_inset.top;
}
- (void)setMj_insetB:(CGFloat)mj_insetB
{
    UIEdgeInsets inset = self.contentInset;
    inset.bottom = mj_insetB;
#ifdef __IPHONE_11_0
    if (gt_ios_11_) {
        inset.bottom -= (self.adjustedContentInset.bottom - self.contentInset.bottom);
    }
#endif
    self.contentInset = inset;
}
- (CGFloat)mj_insetB
{
    return self.contentInset.bottom;
    return self.mj_inset.bottom;
}
- (void)setMj_insetL:(CGFloat)mj_insetL
{
    UIEdgeInsets inset = self.contentInset;
    inset.left = mj_insetL;
#ifdef __IPHONE_11_0
    if (gt_ios_11_) {
        inset.left -= (self.adjustedContentInset.left - self.contentInset.left);
    }
#endif
    self.contentInset = inset;
}
- (CGFloat)mj_insetL
{
    return self.contentInset.left;
    return self.mj_inset.left;
}
- (void)setMj_insetR:(CGFloat)mj_insetR
{
    UIEdgeInsets inset = self.contentInset;
    inset.right = mj_insetR;
#ifdef __IPHONE_11_0
    if (gt_ios_11_) {
        inset.right -= (self.adjustedContentInset.right - self.contentInset.right);
    }
#endif
    self.contentInset = inset;
}
- (CGFloat)mj_insetR
{
    return self.contentInset.right;
    return self.mj_inset.right;
}
- (void)setMj_offsetX:(CGFloat)mj_offsetX
@@ -108,3 +148,4 @@
    return self.contentSize.height;
}
@end
#pragma clang diagnostic pop
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h
New file
@@ -0,0 +1,26 @@
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  代码地址: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
//  UIScrollView+MJRefresh.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/4.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//  给ScrollView增加下拉刷新、上拉刷新的功能
#import <UIKit/UIKit.h>
#import "MJRefreshConst.h"
@class MJRefreshHeader, MJRefreshFooter;
@interface UIScrollView (MJRefresh)
/** 下拉刷新控件 */
@property (strong, nonatomic) MJRefreshHeader *mj_header;
@property (strong, nonatomic) MJRefreshHeader *header MJRefreshDeprecated("使用mj_header");
/** 上拉刷新控件 */
@property (strong, nonatomic) MJRefreshFooter *mj_footer;
@property (strong, nonatomic) MJRefreshFooter *footer MJRefreshDeprecated("使用mj_footer");
#pragma mark - other
- (NSInteger)mj_totalDataCount;
@property (copy, nonatomic) void (^mj_reloadDataBlock)(NSInteger totalDataCount);
@end
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.m copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m
File was copied from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.m
@@ -30,50 +30,71 @@
#pragma mark - header
static const char MJRefreshHeaderKey = '\0';
- (void)setHeader:(MJRefreshHeader *)header
- (void)setMj_header:(MJRefreshHeader *)mj_header
{
    if (header != self.header) {
    if (mj_header != self.mj_header) {
        // 删除旧的,添加新的
        [self.header removeFromSuperview];
        [self addSubview:header];
        [self.mj_header removeFromSuperview];
        [self insertSubview:mj_header atIndex:0];
        
        // 存储新的
        [self willChangeValueForKey:@"header"]; // KVO
        [self willChangeValueForKey:@"mj_header"]; // KVO
        objc_setAssociatedObject(self, &MJRefreshHeaderKey,
                                 header, OBJC_ASSOCIATION_ASSIGN);
        [self didChangeValueForKey:@"header"]; // KVO
                                 mj_header, OBJC_ASSOCIATION_ASSIGN);
        [self didChangeValueForKey:@"mj_header"]; // KVO
    }
}
- (MJRefreshHeader *)header
- (MJRefreshHeader *)mj_header
{
    return objc_getAssociatedObject(self, &MJRefreshHeaderKey);
}
#pragma mark - footer
static const char MJRefreshFooterKey = '\0';
- (void)setFooter:(MJRefreshFooter *)footer
- (void)setMj_footer:(MJRefreshFooter *)mj_footer
{
    if (footer != self.footer) {
    if (mj_footer != self.mj_footer) {
        // 删除旧的,添加新的
        [self.footer removeFromSuperview];
        [self addSubview:footer];
        [self.mj_footer removeFromSuperview];
        [self insertSubview:mj_footer atIndex:0];
        
        // 存储新的
        [self willChangeValueForKey:@"footer"]; // KVO
        [self willChangeValueForKey:@"mj_footer"]; // KVO
        objc_setAssociatedObject(self, &MJRefreshFooterKey,
                                 footer, OBJC_ASSOCIATION_ASSIGN);
        [self didChangeValueForKey:@"footer"]; // KVO
                                 mj_footer, OBJC_ASSOCIATION_ASSIGN);
        [self didChangeValueForKey:@"mj_footer"]; // KVO
    }
}
- (MJRefreshFooter *)footer
- (MJRefreshFooter *)mj_footer
{
    return objc_getAssociatedObject(self, &MJRefreshFooterKey);
}
#pragma mark - 过期
- (void)setFooter:(MJRefreshFooter *)footer
{
    self.mj_footer = footer;
}
- (MJRefreshFooter *)footer
{
    return self.mj_footer;
}
- (void)setHeader:(MJRefreshHeader *)header
{
    self.mj_header = header;
}
- (MJRefreshHeader *)header
{
    return self.mj_header;
}
#pragma mark - other
- (NSInteger)totalDataCount
- (NSInteger)mj_totalDataCount
{
    NSInteger totalCount = 0;
    if ([self isKindOfClass:[UITableView class]]) {
@@ -93,21 +114,21 @@
}
static const char MJRefreshReloadDataBlockKey = '\0';
- (void)setReloadDataBlock:(void (^)(NSInteger))reloadDataBlock
- (void)setMj_reloadDataBlock:(void (^)(NSInteger))mj_reloadDataBlock
{
    [self willChangeValueForKey:@"reloadDataBlock"]; // KVO
    objc_setAssociatedObject(self, &MJRefreshReloadDataBlockKey, reloadDataBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
    [self didChangeValueForKey:@"reloadDataBlock"]; // KVO
    [self willChangeValueForKey:@"mj_reloadDataBlock"]; // KVO
    objc_setAssociatedObject(self, &MJRefreshReloadDataBlockKey, mj_reloadDataBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
    [self didChangeValueForKey:@"mj_reloadDataBlock"]; // KVO
}
- (void (^)(NSInteger))reloadDataBlock
- (void (^)(NSInteger))mj_reloadDataBlock
{
    return objc_getAssociatedObject(self, &MJRefreshReloadDataBlockKey);
}
- (void)executeReloadDataBlock
{
    !self.reloadDataBlock ? : self.reloadDataBlock(self.totalDataCount);
    !self.mj_reloadDataBlock ? : self.mj_reloadDataBlock(self.mj_totalDataCount);
}
@end
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIView+MJExtension.h
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIView+MJExtension.m
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefreshConst.h
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefreshConst.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/README.md
New file
@@ -0,0 +1,362 @@
![(logo)](http://images.cnitblog.com/blog2015/497279/201505/051004492043385.png)
## MJRefresh
* An easy way to use pull-to-refresh
## Contents
* Getting Started
    * [Features【Support what kinds of controls to refresh】](#Support_what_kinds_of_controls_to_refresh)
    * [Installation【How to use MJRefresh】](#How_to_use_MJRefresh)
    * [Who's using【More than hundreds of Apps are using MJRefresh】](#More_than_hundreds_of_Apps_are_using_MJRefresh)
    * [Classes【The Class Structure Chart of MJRefresh】](#The_Class_Structure_Chart_of_MJRefresh)
* Comment API
    * [MJRefreshComponent.h](#MJRefreshComponent.h)
    * [MJRefreshHeader.h](#MJRefreshHeader.h)
    * [MJRefreshFooter.h](#MJRefreshFooter.h)
    * [MJRefreshAutoFooter.h](#MJRefreshAutoFooter.h)
* Examples
    * [Reference](#Reference)
    * [The drop-down refresh 01-Default](#The_drop-down_refresh_01-Default)
    * [The drop-down refresh 02-Animation image](#The_drop-down_refresh_02-Animation_image)
    * [The drop-down refresh 03-Hide the time](#The_drop-down_refresh_03-Hide_the_time)
    * [The drop-down refresh 04-Hide status and time](#The_drop-down_refresh_04-Hide_status_and_time)
    * [The drop-down refresh 05-DIY title](#The_drop-down_refresh_05-DIY_title)
    * [The drop-down refresh 06-DIY the control of refresh](#The_drop-down_refresh_06-DIY_the_control_of_refresh)
    * [The pull to refresh 01-Default](#The_pull_to_refresh_01-Default)
    * [The pull to refresh 02-Animation image](#The_pull_to_refresh_02-Animation_image)
    * [The pull to refresh 03-Hide the title of refresh status](#The_pull_to_refresh_03-Hide_the_title_of_refresh_status)
    * [The pull to refresh 04-All loaded](#The_pull_to_refresh_04-All_loaded)
    * [The pull to refresh 05-DIY title](#The_pull_to_refresh_05-DIY_title)
    * [The pull to refresh 06-Hidden After loaded](#The_pull_to_refresh_06-Hidden_After_loaded)
    * [The pull to refresh 07-Automatic back of the pull01](#The_pull_to_refresh_07-Automatic_back_of_the_pull01)
    * [The pull to refresh 08-Automatic back of the pull02](#The_pull_to_refresh_08-Automatic_back_of_the_pull02)
    * [The pull to refresh 09-DIY the control of refresh(Automatic refresh)](#The_pull_to_refresh_09-DIY_the_control_of_refresh(Automatic_refresh))
    * [The pull to refresh 10-DIY the control of refresh(Automatic back)](#The_pull_to_refresh_10-DIY_the_control_of_refresh(Automatic_back))
    * [UICollectionView01-The pull and drop-down refresh](#UICollectionView01-The_pull_and_drop-down_refresh)
    * [UIWebView01-The drop-down refresh](#UIWebView01-The_drop-down_refresh)
* [Hope](#Hope)
## <a id="Support_what_kinds_of_controls_to_refresh"></a>Support what kinds of controls to refresh
* `UIScrollView`、`UITableView`、`UICollectionView`、`UIWebView`
## <a id="How_to_use_MJRefresh"></a>How to use MJRefresh
* Installation with CocoaPods:`pod 'MJRefresh'`
* Manual import:
    * Drag All files in the `MJRefresh` folder to project
    * Import the main file:`#import "MJRefresh.h"`
```objc
Base                        Custom
MJRefresh.bundle            MJRefresh.h
MJRefreshConst.h            MJRefreshConst.m
UIScrollView+MJExtension.h  UIScrollView+MJExtension.m
UIScrollView+MJRefresh.h    UIScrollView+MJRefresh.m
UIView+MJExtension.h        UIView+MJExtension.m
```
## <a id="More_than_hundreds_of_Apps_are_using_MJRefresh"></a>More than hundreds of Apps are using MJRefresh
<img src="http://images0.cnblogs.com/blog2015/497279/201506/141212365041650.png" width="200" height="300">
* More information of App can focus on:[M了个J-博客园](http://www.cnblogs.com/mjios/p/4409853.html)
## <a id="The_Class_Structure_Chart_of_MJRefresh"></a>The Class Structure Chart of MJRefresh
![](http://images0.cnblogs.com/blog2015/497279/201506/132232456139177.png)
- `The class of red text` in the chart:You can use them directly
    - The drop-down refresh control types
        - Normal:`MJRefreshNormalHeader`
        - Gif:`MJRefreshGifHeader`
    - The pull to refresh control types
        - Auto refresh
            - Normal:`MJRefreshAutoNormalFooter`
            - Gif:`MJRefreshAutoGifFooter`
        - Auto Back
            - Normal:`MJRefreshBackNormalFooter`
            - Gif:`MJRefreshBackGifFooter`
- `The class of non-red text` in the chart:For inheritance,to use DIY the control of refresh
- About how to DIY the control of refresh,You can refer the Class in below Chart<br>
<img src="http://images0.cnblogs.com/blog2015/497279/201506/141358159107893.png" width="30%" height="30%">
## <a id="MJRefreshComponent.h"></a>MJRefreshComponent.h
```objc
/** The Base Class of refresh control */
@interface MJRefreshComponent : UIView
#pragma mark -  Control the state of Refresh
/** BeginRefreshing */
- (void)beginRefreshing;
/** EndRefreshing */
- (void)endRefreshing;
/** IsRefreshing */
- (BOOL)isRefreshing;
#pragma mark - Other
/** According to the drag ratio to change alpha automatically */
@property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha;
@end
```
## <a id="MJRefreshHeader.h"></a>MJRefreshHeader.h
```objc
@interface MJRefreshHeader : MJRefreshComponent
/** Creat header */
+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** Creat header */
+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
/** This key is used to storage the time that the last time of drown-down successfully */
@property (copy, nonatomic) NSString *lastUpdatedTimeKey;
/** The last time of drown-down successfully */
@property (strong, nonatomic, readonly) NSDate *lastUpdatedTime;
/** Ignored scrollView contentInset top */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop;
@end
```
## <a id="MJRefreshFooter.h"></a>MJRefreshFooter.h
```objc
@interface MJRefreshFooter : MJRefreshComponent
/** Creat footer */
+ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** Creat footer */
+ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
/** NoticeNoMoreData */
- (void)noticeNoMoreData;
/** ResetNoMoreData(Clear the status of NoMoreData ) */
- (void)resetNoMoreData;
/** Ignored scrollView contentInset bottom */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom;
/** Automaticlly show or hidden by the count of data(Show-have data,Hidden- no data) */
@property (assign, nonatomic) BOOL automaticallyHidden;
@end
```
## <a id="MJRefreshAutoFooter.h"></a>MJRefreshAutoFooter.h
```objc
@interface MJRefreshAutoFooter : MJRefreshFooter
/** Is Automatically Refresh(Default is Yes) */
@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
/** When there is much at the bottom of the control is automatically refresh(Default is 1.0,Is at the bottom of the control appears in full, will refresh automatically) */
@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
@end
```
## <a id="Reference"></a>Reference
```objc
* Due to there are more functions of this framework,Don't write specific text describe its usage
* You can directly reference examples MJTableViewController、MJCollectionViewController、MJWebViewController,More intuitive and fast.
```
<img src="http://images0.cnblogs.com/blog2015/497279/201506/141345470048120.png" width="30%" height="30%">
## <a id="The_drop-down_refresh_01-Default"></a>The drop-down refresh 01-Default
```objc
self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
   //Call this Block When enter the refresh status automatically
}];
// Set the callback(Once you enter the refresh status,then call the action of target,that is call [self loadNewData])
self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// Enter the refresh status immediately
[self.tableView.header beginRefreshing];
```
![(下拉刷新01-普通)](http://images0.cnblogs.com/blog2015/497279/201506/141204343486151.gif)
## <a id="The_drop-down_refresh_02-Animation_image"></a>The drop-down refresh 02-Animation image
```objc
// Set the callback(一Once you enter the refresh status,then call the action of target,that is call [self loadNewData])
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// Set the ordinary state of animated images
[header setImages:idleImages forState:MJRefreshStateIdle];
// Set the pulling state of animated images(Enter the status of refreshing as soon as loosen)
[header setImages:pullingImages forState:MJRefreshStatePulling];
// Set the refreshing state of animated images
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];
// Set header
self.tableView.mj_header = header;
```
![(下拉刷新02-动画图片)](http://images0.cnblogs.com/blog2015/497279/201506/141204402238389.gif)
## <a id="The_drop-down_refresh_03-Hide_the_time"></a>The drop-down refresh 03-Hide the time
```objc
// Hide the time
header.lastUpdatedTimeLabel.hidden = YES;
```
![(下拉刷新03-隐藏时间)](http://images0.cnblogs.com/blog2015/497279/201506/141204456132944.gif)
## <a id="The_drop-down_refresh_04-Hide_status_and_time"></a>The drop-down refresh 04-Hide status and time
```objc
// Hide the time
header.lastUpdatedTimeLabel.hidden = YES;
// Hide the status
header.stateLabel.hidden = YES;
```
![(下拉刷新04-隐藏状态和时间0)](http://images0.cnblogs.com/blog2015/497279/201506/141204508639539.gif)
## <a id="The_drop-down_refresh_05-DIY_title"></a>The drop-down refresh 05-DIY title
```objc
// Set title
[header setTitle:@"Pull down to refresh" forState:MJRefreshStateIdle];
[header setTitle:@"Release to refresh" forState:MJRefreshStatePulling];
[header setTitle:@"Loading ..." forState:MJRefreshStateRefreshing];
// Set font
header.stateLabel.font = [UIFont systemFontOfSize:15];
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];
// Set textColor
header.stateLabel.textColor = [UIColor redColor];
header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
```
![(下拉刷新05-自定义文字)](http://images0.cnblogs.com/blog2015/497279/201506/141204563633593.gif)
## <a id="The_drop-down_refresh_06-DIY_the_control_of_refresh"></a>The drop-down refresh 06-DIY the control of refresh
```objc
self.tableView.mj_header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// Implementation reference to MJDIYHeader.h和MJDIYHeader.m
```
![(下拉刷新06-自定义刷新控件)](http://images0.cnblogs.com/blog2015/497279/201506/141205019261159.gif)
## <a id="The_pull_to_refresh_01-Default"></a>The pull to refresh 01-Default
```objc
self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
    //Call this Block When enter the refresh status automatically
}];
// Set the callback(Once you enter the refresh status,then call the action of target,that is call [self loadMoreData])
self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
```
![(上拉刷新01-默认)](http://images0.cnblogs.com/blog2015/497279/201506/141205090047696.gif)
## <a id="The_pull_to_refresh_02-Animation_image"></a>The pull to refresh 02-Animation image
```objc
// Set the callback(Once you enter the refresh status,then call the action of target,that is call [self loadMoreData])
MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// Set the refresh image
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
// Set footer
self.tableView.mj_footer = footer;
```
![(上拉刷新02-动画图片)](http://images0.cnblogs.com/blog2015/497279/201506/141205141445793.gif)
## <a id="The_pull_to_refresh_03-Hide_the_title_of_refresh_status"></a>The pull to refresh 03-Hide the title of refresh status
```objc
// Hide the title of refresh status
footer.refreshingTitleHidden = YES;
// If does have not above method,then use footer.stateLabel.hidden = YES;
```
![(上拉刷新03-隐藏刷新状态的文字)](http://images0.cnblogs.com/blog2015/497279/201506/141205200985774.gif)
## <a id="The_pull_to_refresh_04-All_loaded"></a>The pull to refresh 04-All loaded
```objc
//Become the status of NoMoreData
[footer noticeNoMoreData];
```
![(上拉刷新04-全部加载完毕)](http://images0.cnblogs.com/blog2015/497279/201506/141205248634686.gif)
## <a id="The_pull_to_refresh_05-DIY_title"></a>The pull to refresh 05-DIY title
```objc
// Set title
[footer setTitle:@"Click or drag up to refresh" forState:MJRefreshStateIdle];
[footer setTitle:@"Loading more ..." forState:MJRefreshStateRefreshing];
[footer setTitle:@"No more data" forState:MJRefreshStateNoMoreData];
// Set font
footer.stateLabel.font = [UIFont systemFontOfSize:17];
// Set textColor
footer.stateLabel.textColor = [UIColor blueColor];
```
![(上拉刷新05-自定义文字)](http://images0.cnblogs.com/blog2015/497279/201506/141205295511153.gif)
## <a id="The_pull_to_refresh_06-Hidden_After_loaded"></a>The pull to refresh 06-Hidden After loaded
```objc
//Hidden current control of the pull to refresh
self.tableView.mj_footer.hidden = YES;
```
![(上拉刷新06-加载后隐藏)](http://images0.cnblogs.com/blog2015/497279/201506/141205343481821.gif)
## <a id="The_pull_to_refresh_07-Automatic_back_of_the_pull01"></a>The pull to refresh 07-Automatic back of the pull01
```objc
self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
```
![(上拉刷新07-自动回弹的上拉01)](http://images0.cnblogs.com/blog2015/497279/201506/141205392239231.gif)
## <a id="The_pull_to_refresh_08-Automatic_back_of_the_pull02"></a>The pull to refresh 08-Automatic back of the pull02
```objc
MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// Set the normal state of the animated image
[footer setImages:idleImages forState:MJRefreshStateIdle];
//  Set the pulling state of animated images(Enter the status of refreshing as soon as loosen)
[footer setImages:pullingImages forState:MJRefreshStatePulling];
// Set the refreshing state of animated images
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
// Set footer
self.tableView.mj_footer = footer;
```
![(上拉刷新07-自动回弹的上拉02)](http://images0.cnblogs.com/blog2015/497279/201506/141205441443628.gif)
## <a id="The_pull_to_refresh_09-DIY_the_control_of_refresh(Automatic_refresh)"></a>The pull to refresh 09-DIY the control of refresh(Automatic refresh)
```objc
self.tableView.mj_footer = [MJDIYAutoFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// Implementation reference to MJDIYAutoFooter.h和MJDIYAutoFooter.m
```
![(上拉刷新09-自定义刷新控件(自动刷新))](http://images0.cnblogs.com/blog2015/497279/201506/141205500195866.gif)
## <a id="The_pull_to_refresh_10-DIY_the_control_of_refresh(Automatic_back)"></a>The pull to refresh 10-DIY the control of refresh(Automatic back)
```objc
self.tableView.mj_footer = [MJDIYBackFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// Implementation reference to MJDIYBackFooter.h和MJDIYBackFooter.m
```
![(上拉刷新10-自定义刷新控件(自动回弹))](http://images0.cnblogs.com/blog2015/497279/201506/141205560666819.gif)
## <a id="UICollectionView01-The_pull_and_drop-down_refresh"></a>UICollectionView01-The pull and drop-down refresh
```objc
// The drop-down refresh
self.collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
   //Call this Block When enter the refresh status automatically
}];
// The pull to refresh
self.collectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
   //Call this Block When enter the refresh status automatically
}];
```
![(UICollectionView01-上下拉刷新)](http://images0.cnblogs.com/blog2015/497279/201506/141206021603758.gif)
## <a id="UIWebView01-The_drop-down_refresh"></a>UIWebView01-The drop-down refresh
```objc
//Add the control of The drop-down refresh
self.webView.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
   //Call this Block When enter the refresh status automatically
}];
```
![(UICollectionView01-上下拉刷新)](http://images0.cnblogs.com/blog2015/497279/201506/141206080514524.gif)
## Remind
* ARC
* iOS>=6.0
* iPhone \ iPad screen anyway
## <a id="Hope"></a>Hope
* If you find bug when used,Hope you can Issues me,Thank you or try to download the latest code of this framework to see the BUG has been fixed or not)
* If you find the function is not enough when used,Hope you can Issues me,I very much to add more useful function to this framework ,Thank you !
* If you want to contribute code for MJRefresh,please Pull Requests me
*  If you use MJRefresh in your develop app,Hope you can go to[CocoaControls](https://www.cocoacontrols.com/controls/mjrefresh)to add the iTunes path
 of you app,I Will install your app,and according to the usage of many app,to be a better design and improve to MJRefresh,Thank you !
   * StepO1(WeChat is just an Example,Explore“Your app name itunes”)
![(step01)](http://ww4.sinaimg.cn/mw1024/800cdf9ctw1eq0viiv5rsj20sm0ea41t.jpg)
   * StepO2
![(step02)](http://ww2.sinaimg.cn/mw1024/800cdf9ctw1eq0vilejxlj20tu0me7a0.jpg)
   * StepO3
![(step03)](http://ww1.sinaimg.cn/mw1024/800cdf9ctw1eq0viocpo5j20wc0dc0un.jpg)
   * StepO4
![(step04)](http://ww3.sinaimg.cn/mw1024/800cdf9ctw1eq0vir137xj20si0gewgu.jpg)
EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJExtension.h
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJExtension.m
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJRefresh.h
File was deleted
EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJRefresh.m
File was deleted
EZSDK/EZSDK/EZ/Venders/Masonry/MASCompositeConstraint.h
old mode 100644 new mode 100755
EZSDK/EZSDK/EZ/Venders/Masonry/MASCompositeConstraint.m
old mode 100644 new mode 100755
@@ -97,7 +97,7 @@
#pragma mark - Animator proxy
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
- (MASConstraint *)animator {
    for (MASConstraint *constraint in self.childConstraints) {
@@ -129,6 +129,12 @@
    }
}
- (void)setInset:(CGFloat)inset {
    for (MASConstraint *constraint in self.childConstraints) {
        constraint.inset = inset;
    }
}
- (void)setOffset:(CGFloat)offset {
    for (MASConstraint *constraint in self.childConstraints) {
        constraint.offset = offset;
EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint+Private.h
old mode 100644 new mode 100755
EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.h
old mode 100644 new mode 100755
@@ -27,6 +27,13 @@
/**
 *    Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
 */
- (MASConstraint * (^)(CGFloat inset))inset;
/**
 *    Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeWidth, NSLayoutAttributeHeight
 */
- (MASConstraint * (^)(CGSize offset))sizeOffset;
@@ -66,17 +73,17 @@
/**
 *    Sets the NSLayoutConstraint priority to MASLayoutPriorityLow
 */
- (MASConstraint * (^)())priorityLow;
- (MASConstraint * (^)(void))priorityLow;
/**
 *    Sets the NSLayoutConstraint priority to MASLayoutPriorityMedium
 */
- (MASConstraint * (^)())priorityMedium;
- (MASConstraint * (^)(void))priorityMedium;
/**
 *    Sets the NSLayoutConstraint priority to MASLayoutPriorityHigh
 */
- (MASConstraint * (^)())priorityHigh;
- (MASConstraint * (^)(void))priorityHigh;
/**
 *    Sets the constraint relation to NSLayoutRelationEqual
@@ -127,7 +134,14 @@
- (MASConstraint *)centerY;
- (MASConstraint *)baseline;
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
- (MASConstraint *)firstBaseline;
- (MASConstraint *)lastBaseline;
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
- (MASConstraint *)leftMargin;
- (MASConstraint *)rightMargin;
@@ -159,6 +173,13 @@
/**
 *    Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
 */
- (void)setInset:(CGFloat)inset;
/**
 *    Modifies the NSLayoutConstraint constant,
 *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
 *  NSLayoutAttributeWidth, NSLayoutAttributeHeight
 */
- (void)setSizeOffset:(CGSize)sizeOffset;
@@ -178,7 +199,7 @@
// NSLayoutConstraint Installation support
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
/**
 *  Whether or not to go through the animator proxy when modifying the constraint
 */
EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.m
old mode 100644 new mode 100755
@@ -62,21 +62,21 @@
#pragma mark - MASLayoutPriority proxies
- (MASConstraint * (^)())priorityLow {
- (MASConstraint * (^)(void))priorityLow {
    return ^id{
        self.priority(MASLayoutPriorityDefaultLow);
        return self;
    };
}
- (MASConstraint * (^)())priorityMedium {
- (MASConstraint * (^)(void))priorityMedium {
    return ^id{
        self.priority(MASLayoutPriorityDefaultMedium);
        return self;
    };
}
- (MASConstraint * (^)())priorityHigh {
- (MASConstraint * (^)(void))priorityHigh {
    return ^id{
        self.priority(MASLayoutPriorityDefaultHigh);
        return self;
@@ -88,6 +88,13 @@
- (MASConstraint * (^)(MASEdgeInsets))insets {
    return ^id(MASEdgeInsets insets){
        self.insets = insets;
        return self;
    };
}
- (MASConstraint * (^)(CGFloat))inset {
    return ^id(CGFloat inset){
        self.inset = inset;
        return self;
    };
}
@@ -208,7 +215,18 @@
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline];
}
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
- (MASConstraint *)firstBaseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline];
}
- (MASConstraint *)lastBaseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline];
}
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
- (MASConstraint *)leftMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin];
@@ -258,13 +276,15 @@
- (void)setInsets:(MASEdgeInsets __unused)insets { MASMethodNotImplemented(); }
- (void)setInset:(CGFloat __unused)inset { MASMethodNotImplemented(); }
- (void)setSizeOffset:(CGSize __unused)sizeOffset { MASMethodNotImplemented(); }
- (void)setCenterOffset:(CGPoint __unused)centerOffset { MASMethodNotImplemented(); }
- (void)setOffset:(CGFloat __unused)offset { MASMethodNotImplemented(); }
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
- (MASConstraint *)animator { MASMethodNotImplemented(); }
EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.h
old mode 100644 new mode 100755
@@ -1,5 +1,5 @@
//
//  MASConstraintBuilder.h
//  MASConstraintMaker.h
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
@@ -22,7 +22,14 @@
    MASAttributeCenterY = 1 << NSLayoutAttributeCenterY,
    MASAttributeBaseline = 1 << NSLayoutAttributeBaseline,
    
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
    MASAttributeFirstBaseline = 1 << NSLayoutAttributeFirstBaseline,
    MASAttributeLastBaseline = 1 << NSLayoutAttributeLastBaseline,
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
    
    MASAttributeLeftMargin = 1 << NSLayoutAttributeLeftMargin,
    MASAttributeRightMargin = 1 << NSLayoutAttributeRightMargin,
@@ -60,7 +67,14 @@
@property (nonatomic, strong, readonly) MASConstraint *centerY;
@property (nonatomic, strong, readonly) MASConstraint *baseline;
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
@property (nonatomic, strong, readonly) MASConstraint *firstBaseline;
@property (nonatomic, strong, readonly) MASConstraint *lastBaseline;
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
@property (nonatomic, strong, readonly) MASConstraint *leftMargin;
@property (nonatomic, strong, readonly) MASConstraint *rightMargin;
@@ -114,7 +128,7 @@
/**
 *    initialises the maker with a default view
 *
 *    @param    view    any MASConstrait are created with this view as the first item
 *    @param    view    any MASConstraint are created with this view as the first item
 *
 *    @return    a new MASConstraintMaker
 */
EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.m
old mode 100644 new mode 100755
@@ -1,5 +1,5 @@
//
//  MASConstraintBuilder.m
//  MASConstraintMaker.m
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
@@ -78,7 +78,10 @@
    __unused MASAttribute anyAttribute = (MASAttributeLeft | MASAttributeRight | MASAttributeTop | MASAttributeBottom | MASAttributeLeading
                                          | MASAttributeTrailing | MASAttributeWidth | MASAttributeHeight | MASAttributeCenterX
                                          | MASAttributeCenterY | MASAttributeBaseline
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
                                          | MASAttributeFirstBaseline | MASAttributeLastBaseline
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
                                          | MASAttributeLeftMargin | MASAttributeRightMargin | MASAttributeTopMargin | MASAttributeBottomMargin
                                          | MASAttributeLeadingMargin | MASAttributeTrailingMargin | MASAttributeCenterXWithinMargins
                                          | MASAttributeCenterYWithinMargins
@@ -101,7 +104,14 @@
    if (attrs & MASAttributeCenterY) [attributes addObject:self.view.mas_centerY];
    if (attrs & MASAttributeBaseline) [attributes addObject:self.view.mas_baseline];
    
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
    if (attrs & MASAttributeFirstBaseline) [attributes addObject:self.view.mas_firstBaseline];
    if (attrs & MASAttributeLastBaseline) [attributes addObject:self.view.mas_lastBaseline];
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
    
    if (attrs & MASAttributeLeftMargin) [attributes addObject:self.view.mas_leftMargin];
    if (attrs & MASAttributeRightMargin) [attributes addObject:self.view.mas_rightMargin];
@@ -182,7 +192,20 @@
    };
}
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
- (MASConstraint *)firstBaseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline];
}
- (MASConstraint *)lastBaseline {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline];
}
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
- (MASConstraint *)leftMargin {
    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin];
EZSDK/EZSDK/EZ/Venders/Masonry/MASLayoutConstraint.h
old mode 100644 new mode 100755
EZSDK/EZSDK/EZ/Venders/Masonry/MASLayoutConstraint.m
old mode 100644 new mode 100755
EZSDK/EZSDK/EZ/Venders/Masonry/MASUtilities.h
old mode 100644 new mode 100755
@@ -8,7 +8,9 @@
#import <Foundation/Foundation.h>
#if TARGET_OS_IPHONE
#if TARGET_OS_IPHONE || TARGET_OS_TV
    #import <UIKit/UIKit.h>
    #define MAS_VIEW UIView
@@ -49,13 +51,15 @@
 *
 *  MASAttachKeys(view1, view2);
 */
#define MASAttachKeys(...)                                                    \
    NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__);     \
    for (id key in keyPairs.allKeys) {                                        \
        id obj = keyPairs[key];                                               \
        NSAssert([obj respondsToSelector:@selector(setMas_key:)],             \
                 @"Cannot attach mas_key to %@", obj);                        \
        [obj setMas_key:key];                                                 \
#define MASAttachKeys(...)                                                        \
    {                                                                             \
        NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__);     \
        for (id key in keyPairs.allKeys) {                                        \
            id obj = keyPairs[key];                                               \
            NSAssert([obj respondsToSelector:@selector(setMas_key:)],             \
                     @"Cannot attach mas_key to %@", obj);                        \
            [obj setMas_key:key];                                                 \
        }                                                                         \
    }
/**
EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.h
old mode 100644 new mode 100755
@@ -1,5 +1,5 @@
//
//  MASAttribute.h
//  MASViewAttribute.h
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.m
old mode 100644 new mode 100755
@@ -1,5 +1,5 @@
//
//  MASAttribute.m
//  MASViewAttribute.m
//  Masonry
//
//  Created by Jonas Budelmann on 21/07/13.
EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.h
old mode 100644 new mode 100755
@@ -1,5 +1,5 @@
//
//  MASConstraint.h
//  MASViewConstraint.h
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.m
old mode 100644 new mode 100755
@@ -1,5 +1,5 @@
//
//  MASConstraint.m
//  MASViewConstraint.m
//  Masonry
//
//  Created by Jonas Budelmann on 20/07/13.
@@ -86,7 +86,7 @@
- (void)setLayoutConstant:(CGFloat)layoutConstant {
    _layoutConstant = layoutConstant;
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
    if (self.useAnimator) {
        [self.layoutConstraint.animator setConstant:layoutConstant];
    } else {
@@ -175,6 +175,7 @@
            NSMutableArray *children = NSMutableArray.new;
            for (id attr in attribute) {
                MASViewConstraint *viewConstraint = [self copy];
                viewConstraint.layoutRelation = relation;
                viewConstraint.secondViewAttribute = attr;
                [children addObject:viewConstraint];
            }
@@ -211,7 +212,7 @@
#pragma mark - Animator proxy
#if TARGET_OS_MAC && !TARGET_OS_IPHONE
#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
- (MASConstraint *)animator {
    self.useAnimator = YES;
@@ -253,6 +254,10 @@
    }
}
- (void)setInset:(CGFloat)inset {
    [self setInsets:(MASEdgeInsets){.top = inset, .left = inset, .bottom = inset, .right = inset}];
}
- (void)setOffset:(CGFloat)offset {
    self.layoutConstant = offset;
}
@@ -288,28 +293,21 @@
#pragma mark - MASConstraint
- (void)activate {
    if ([self supportsActiveProperty] && self.layoutConstraint) {
        if (self.hasBeenInstalled) {
            return;
        }
        self.layoutConstraint.active = YES;
        [self.firstViewAttribute.view.mas_installedConstraints addObject:self];
    } else {
        [self install];
    }
    [self install];
}
- (void)deactivate {
    if ([self supportsActiveProperty]) {
        self.layoutConstraint.active = NO;
        [self.firstViewAttribute.view.mas_installedConstraints removeObject:self];
    } else {
        [self uninstall];
    }
    [self uninstall];
}
- (void)install {
    if (self.hasBeenInstalled) {
        return;
    }
    if ([self supportsActiveProperty] && self.layoutConstraint) {
        self.layoutConstraint.active = YES;
        [self.firstViewAttribute.view.mas_installedConstraints addObject:self];
        return;
    }
    
@@ -387,6 +385,12 @@
}
- (void)uninstall {
    if ([self supportsActiveProperty]) {
        self.layoutConstraint.active = NO;
        [self.firstViewAttribute.view.mas_installedConstraints removeObject:self];
        return;
    }
    [self.installedView removeConstraint:self.layoutConstraint];
    self.layoutConstraint = nil;
    self.installedView = nil;
EZSDK/EZSDK/EZ/Venders/Masonry/Masonry.h
old mode 100644 new mode 100755
EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.h
old mode 100644 new mode 100755
@@ -25,7 +25,7 @@
 *
 *  @return Array of created MASConstraints
 */
- (NSArray *)mas_makeConstraints:(void (^)(MASConstraintMaker *make))block;
- (NSArray *)mas_makeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
/**
 *  Creates a MASConstraintMaker with each view in the callee.
@@ -36,7 +36,7 @@
 *
 *  @return Array of created/updated MASConstraints
 */
- (NSArray *)mas_updateConstraints:(void (^)(MASConstraintMaker *make))block;
- (NSArray *)mas_updateConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
/**
 *  Creates a MASConstraintMaker with each view in the callee.
@@ -47,7 +47,7 @@
 *
 *  @return Array of created/updated MASConstraints
 */
- (NSArray *)mas_remakeConstraints:(void (^)(MASConstraintMaker *make))block;
- (NSArray *)mas_remakeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
/**
 *  distribute with fixed spacing
EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.m
old mode 100644 new mode 100755
@@ -48,12 +48,12 @@
    if (axisType == MASAxisTypeHorizontal) {
        MAS_VIEW *prev;
        for (int i = 0; i < self.count; i++) {
            MAS_VIEW *v = [self objectAtIndex:i];
            MAS_VIEW *v = self[i];
            [v mas_makeConstraints:^(MASConstraintMaker *make) {
                if (prev) {
                    make.width.equalTo(prev);
                    make.left.equalTo(prev.mas_right).offset(fixedSpacing);
                    if (i == (CGFloat)self.count - 1) {//last one
                    if (i == self.count - 1) {//last one
                        make.right.equalTo(tempSuperView).offset(-tailSpacing);
                    }
                }
@@ -68,12 +68,12 @@
    else {
        MAS_VIEW *prev;
        for (int i = 0; i < self.count; i++) {
            MAS_VIEW *v = [self objectAtIndex:i];
            MAS_VIEW *v = self[i];
            [v mas_makeConstraints:^(MASConstraintMaker *make) {
                if (prev) {
                    make.height.equalTo(prev);
                    make.top.equalTo(prev.mas_bottom).offset(fixedSpacing);
                    if (i == (CGFloat)self.count - 1) {//last one
                    if (i == self.count - 1) {//last one
                        make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
                    }                    
                }
@@ -97,21 +97,20 @@
    if (axisType == MASAxisTypeHorizontal) {
        MAS_VIEW *prev;
        for (int i = 0; i < self.count; i++) {
            MAS_VIEW *v = [self objectAtIndex:i];
            MAS_VIEW *v = self[i];
            [v mas_makeConstraints:^(MASConstraintMaker *make) {
                make.width.equalTo(@(fixedItemLength));
                if (prev) {
                    CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                    make.width.equalTo(@(fixedItemLength));
                    if (i == (CGFloat)self.count - 1) {//last one
                    if (i == self.count - 1) {//last one
                        make.right.equalTo(tempSuperView).offset(-tailSpacing);
                    }
                    else {
                        CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                        make.right.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset);
                    }
                }
                else {//first one
                    make.left.equalTo(tempSuperView).offset(leadSpacing);
                    make.width.equalTo(@(fixedItemLength));
                }
            }];
            prev = v;
@@ -120,21 +119,20 @@
    else {
        MAS_VIEW *prev;
        for (int i = 0; i < self.count; i++) {
            MAS_VIEW *v = [self objectAtIndex:i];
            MAS_VIEW *v = self[i];
            [v mas_makeConstraints:^(MASConstraintMaker *make) {
                make.height.equalTo(@(fixedItemLength));
                if (prev) {
                    CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                    make.height.equalTo(@(fixedItemLength));
                    if (i == (CGFloat)self.count - 1) {//last one
                    if (i == self.count - 1) {//last one
                        make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
                    }
                    else {
                        CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                        make.bottom.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset);
                    }
                }
                else {//first one
                    make.top.equalTo(tempSuperView).offset(leadSpacing);
                    make.height.equalTo(@(fixedItemLength));
                }
            }];
            prev = v;
EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASShorthandAdditions.h
old mode 100644 new mode 100755
EZSDK/EZSDK/EZ/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.h
old mode 100644 new mode 100755
EZSDK/EZSDK/EZ/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m
old mode 100644 new mode 100755
@@ -44,7 +44,12 @@
            @(NSLayoutAttributeCenterY)  : @"centerY",
            @(NSLayoutAttributeBaseline) : @"baseline",
            
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
            @(NSLayoutAttributeFirstBaseline) : @"firstBaseline",
            @(NSLayoutAttributeLastBaseline) : @"lastBaseline",
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
            @(NSLayoutAttributeLeftMargin)           : @"leftMargin",
            @(NSLayoutAttributeRightMargin)          : @"rightMargin",
            @(NSLayoutAttributeTopMargin)            : @"topMargin",
@@ -66,7 +71,7 @@
    static dispatch_once_t once;
    static NSDictionary *descriptionMap;
    dispatch_once(&once, ^{
#if TARGET_OS_IPHONE
#if TARGET_OS_IPHONE || TARGET_OS_TV
        descriptionMap = @{
            @(MASLayoutPriorityDefaultHigh)      : @"high",
            @(MASLayoutPriorityDefaultLow)       : @"low",
@@ -106,16 +111,16 @@
    [description appendFormat:@" %@", [self.class descriptionForObject:self.firstItem]];
    if (self.firstAttribute != NSLayoutAttributeNotAnAttribute) {
        [description appendFormat:@".%@", [self.class.layoutAttributeDescriptionsByValue objectForKey:@(self.firstAttribute)]];
        [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.firstAttribute)]];
    }
    [description appendFormat:@" %@", [self.class.layoutRelationDescriptionsByValue objectForKey:@(self.relation)]];
    [description appendFormat:@" %@", self.class.layoutRelationDescriptionsByValue[@(self.relation)]];
    if (self.secondItem) {
        [description appendFormat:@" %@", [self.class descriptionForObject:self.secondItem]];
    }
    if (self.secondAttribute != NSLayoutAttributeNotAnAttribute) {
        [description appendFormat:@".%@", [self.class.layoutAttributeDescriptionsByValue objectForKey:@(self.secondAttribute)]];
        [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.secondAttribute)]];
    }
    
    if (self.multiplier != 1) {
@@ -131,7 +136,7 @@
    }
    if (self.priority != MASLayoutPriorityRequired) {
        [description appendFormat:@" ^%@", [self.class.layoutPriorityDescriptionsByValue objectForKey:@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]];
        [description appendFormat:@" ^%@", self.class.layoutPriorityDescriptionsByValue[@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]];
    }
    [description appendString:@">"];
EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.h
old mode 100644 new mode 100755
@@ -32,7 +32,14 @@
@property (nonatomic, strong, readonly) MASViewAttribute *mas_baseline;
@property (nonatomic, strong, readonly) MASViewAttribute *(^mas_attribute)(NSLayoutAttribute attr);
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
@property (nonatomic, strong, readonly) MASViewAttribute *mas_firstBaseline;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_lastBaseline;
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
@property (nonatomic, strong, readonly) MASViewAttribute *mas_leftMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_rightMargin;
@@ -42,6 +49,16 @@
@property (nonatomic, strong, readonly) MASViewAttribute *mas_trailingMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerXWithinMargins;
@property (nonatomic, strong, readonly) MASViewAttribute *mas_centerYWithinMargins;
#endif
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuide API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideTop API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideBottom API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideLeft API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideRight API_AVAILABLE(ios(11.0),tvos(11.0));
#endif
@@ -67,7 +84,7 @@
 *
 *  @return Array of created MASConstraints
 */
- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;
- (NSArray *)mas_makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
/**
 *  Creates a MASConstraintMaker with the callee view.
@@ -78,7 +95,7 @@
 *
 *  @return Array of created/updated MASConstraints
 */
- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;
- (NSArray *)mas_updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
/**
 *  Creates a MASConstraintMaker with the callee view.
@@ -89,6 +106,6 @@
 *
 *  @return Array of created/updated MASConstraints
 */
- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;
- (NSArray *)mas_remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
@end
EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.m
old mode 100644 new mode 100755
@@ -87,7 +87,18 @@
    };
}
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
- (MASViewAttribute *)mas_firstBaseline {
    return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeFirstBaseline];
}
- (MASViewAttribute *)mas_lastBaseline {
    return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLastBaseline];
}
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
- (MASViewAttribute *)mas_leftMargin {
    return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeftMargin];
@@ -123,6 +134,26 @@
#endif
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
- (MASViewAttribute *)mas_safeAreaLayoutGuide {
    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
}
- (MASViewAttribute *)mas_safeAreaLayoutGuideTop {
    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeTop];
}
- (MASViewAttribute *)mas_safeAreaLayoutGuideBottom {
    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
}
- (MASViewAttribute *)mas_safeAreaLayoutGuideLeft {
    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeLeft];
}
- (MASViewAttribute *)mas_safeAreaLayoutGuideRight {
    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeRight];
}
#endif
#pragma mark - associated properties
- (id)mas_key {
EZSDK/EZSDK/EZ/Venders/Masonry/View+MASShorthandAdditions.h
old mode 100644 new mode 100755
@@ -29,7 +29,14 @@
@property (nonatomic, strong, readonly) MASViewAttribute *baseline;
@property (nonatomic, strong, readonly) MASViewAttribute *(^attribute)(NSLayoutAttribute attr);
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
@property (nonatomic, strong, readonly) MASViewAttribute *firstBaseline;
@property (nonatomic, strong, readonly) MASViewAttribute *lastBaseline;
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
@property (nonatomic, strong, readonly) MASViewAttribute *leftMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *rightMargin;
@@ -39,6 +46,15 @@
@property (nonatomic, strong, readonly) MASViewAttribute *trailingMargin;
@property (nonatomic, strong, readonly) MASViewAttribute *centerXWithinMargins;
@property (nonatomic, strong, readonly) MASViewAttribute *centerYWithinMargins;
#endif
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideTop API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideBottom API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideLeft API_AVAILABLE(ios(11.0),tvos(11.0));
@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideRight API_AVAILABLE(ios(11.0),tvos(11.0));
#endif
@@ -67,7 +83,14 @@
MAS_ATTR_FORWARD(centerY);
MAS_ATTR_FORWARD(baseline);
#if TARGET_OS_IPHONE
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
MAS_ATTR_FORWARD(firstBaseline);
MAS_ATTR_FORWARD(lastBaseline);
#endif
#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
MAS_ATTR_FORWARD(leftMargin);
MAS_ATTR_FORWARD(rightMargin);
@@ -80,19 +103,28 @@
#endif
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
MAS_ATTR_FORWARD(safeAreaLayoutGuideTop);
MAS_ATTR_FORWARD(safeAreaLayoutGuideBottom);
MAS_ATTR_FORWARD(safeAreaLayoutGuideLeft);
MAS_ATTR_FORWARD(safeAreaLayoutGuideRight);
#endif
- (MASViewAttribute *(^)(NSLayoutAttribute))attribute {
    return [self mas_attribute];
}
- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block {
- (NSArray *)makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
    return [self mas_makeConstraints:block];
}
- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block {
- (NSArray *)updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
    return [self mas_updateConstraints:block];
}
- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block {
- (NSArray *)remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
    return [self mas_remakeConstraints:block];
}
EZSDK/EZSDK/EZ/Venders/Masonry/ViewController+MASAdditions.h
old mode 100644 new mode 100755
EZSDK/EZSDK/EZ/Venders/Masonry/ViewController+MASAdditions.m
old mode 100644 new mode 100755
EZSDK/EZSDK/EZSDK.h
@@ -13,19 +13,33 @@
 传入国内版key 和海外版globalAppKey
 */
+ (BOOL)initLibWithAppKey:(NSString *)appKey globalAppKey:(NSString *)globalAppKey;
/**
 回放播放历史
 设置SDK的accessToken
 */
+(void)playBackVideo:(NSObject*)deviceInfo;
/**
 播放视频
 */
+(void)Play:(NSObject*)deviceInfo;
+(void)setEZAccessToken:(NSString *) accessToken;
/**
 直接跳转到萤石摄像头列表
 */
+(void)go2EZvizMonitor;
/**
 跳转添加添加设备
 */
+(void)addEzvizMonitor;
/**
 查看视频监控直播
 */
+(void)Play:(NSObject*)deviceInfo;
/**
 打开摄像头设置页面
 */
+(void)setting:(NSObject*)deviceInfo;
/**
 回放播放历史
 */
+(void)playBackVideo:(NSObject*)deviceInfo;
@end
EZSDK/EZSDK/EZSDK.m
@@ -20,11 +20,6 @@
#import "EZDeviceTableViewController.h"
#import "EZHCNetDeviceSDK.h"
#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0])
#define LanguageIsChinese ([CURR_LANG rangeOfString:@"zh-Hans"].location != NSNotFound)
@implementation EZSDK
/**
@@ -35,8 +30,8 @@
{
    static BOOL isHavelibInit=NO;
    if (!isHavelibInit) {
//        isHavelibInit=YES;
        NSLog(@"第一次初始化萤石库");
        //        isHavelibInit=YES;
        //        NSLog(@"第一次初始化萤石库");
        if (!LanguageIsChinese) {
            //海外版
            isHavelibInit = [EZGlobalSDK initLibWithAppKey:globalAppKey];
@@ -53,6 +48,113 @@
    }
    return isHavelibInit;
}
/**
 设置SDK的accessToken
 */
+(void)setEZAccessToken:(NSString *) accessToken
{
    [[GlobalKit shareKit] setAccessToken:accessToken];
    [EZOPENSDK setAccessToken:accessToken];
}
//获取当前屏幕显示的viewcontroller   (这里面获取的相当于rootViewController)
+(UINavigationController *)getCurrentVC
{
    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    if (window.windowLevel != UIWindowLevelNormal)
    {
        NSArray *windows = [[UIApplication sharedApplication] windows];
        for(UIWindow * tmpWin in windows)
        {
            if (tmpWin.windowLevel == UIWindowLevelNormal)
            {
                window = tmpWin;
                break;
            }
        }
    }
    return  (UINavigationController *)window.rootViewController;
}
/**
 直接跳转到萤石摄像头列表
 */
+(void)go2EZvizMonitor
{
    //    NSLog(@"go2EZvizMonitor");
    //获取EZMain的stroyboard文件
    UIStoryboard *ezMainStoryboard = [UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
    //获取EZMain.storyboard的实例ViewController--获取摄像头列表
    EZDeviceTableViewController *instanceVC = [ezMainStoryboard instantiateViewControllerWithIdentifier:@"EZCameraList"];
    //push摄像头列表的viewController
    [[self getCurrentVC] setNavigationBarHidden:NO];
    //        NSLog(@"willpush********");
    [[self getCurrentVC] pushViewController:instanceVC animated:YES];
    //        NSLog(@"had pushed********");
}
/**
 跳转添加添加设备
 */
+(void)addEzvizMonitor
{
    //    NSLog(@"添加摄像头");
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
        UIStoryboard *addDeviceStoryBoard = [UIStoryboard storyboardWithName:@"AddDevice" bundle:nil];
        EZAddByQRCodeViewController *rootViewController = [addDeviceStoryBoard instantiateViewControllerWithIdentifier:@"AddByQRCode"];
        [[self getCurrentVC] setNavigationBarHidden:NO];
        [[self getCurrentVC] pushViewController:rootViewController animated:YES];
    } else {
        //        [UIView dd_showMessage:@"iOS 7.0以下扫码功能请自行实现"];
        NSLog(@"iOS 7.0以下扫码功能请自行实现");
    }
}
/**
 查看视频监控直播
 */
+(void)Play:(NSObject*)deviceInfo
{
    UIStoryboard *addDeviceStoryBoard = [UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
    EZLivePlayViewController *rootViewController = [addDeviceStoryBoard instantiateViewControllerWithIdentifier:@"EZLivePlayViewController"];
    //        NSLog(@"play--iphone--rootViewController");
    rootViewController.deviceInfo=(EZDeviceInfo *)deviceInfo;
    NSLog(@"play--iphone--deviceName -%@",rootViewController.deviceInfo.deviceName);
    //        rootViewController.cameraIndex=0;
    [[self getCurrentVC] setNavigationBarHidden:NO];
    [[self getCurrentVC] pushViewController:rootViewController animated:YES];
}
/**
 打开摄像头设置页面
 */
+(void)setting:(NSObject*)deviceInfo
{
    UIStoryboard *settingStoryBoard=[UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
    EZSettingViewController *settingVC=[settingStoryBoard instantiateViewControllerWithIdentifier:@"EZSettingViewController"];
    settingVC.deviceInfo=(EZDeviceInfo *)deviceInfo;
    [[self getCurrentVC] setNavigationBarHidden:NO];
    [[self getCurrentVC] pushViewController:settingVC animated:YES];
}
/**
 回放播放历史
 */
+(void)playBackVideo:(NSObject*)deviceInfo
{
    UIStoryboard *playBackStoryBoard=[UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
    EZPlaybackViewController *playBackVC=[playBackStoryBoard instantiateViewControllerWithIdentifier:@"EZPlaybackViewController"];
    playBackVC.deviceInfo=(EZDeviceInfo *)deviceInfo;
    [[self getCurrentVC] setNavigationBarHidden:NO];
    [[self getCurrentVC] pushViewController:playBackVC animated:YES];
}
//+(void)MonitorPushMessage:(NSString *)MonitorType ID:(NSString *)ID
//{
@@ -122,68 +224,6 @@
//    return ICommons;
//}
//获取当前屏幕显示的viewcontroller   (这里面获取的相当于rootViewController)
+(UINavigationController *)getCurrentVC
{
    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
    if (window.windowLevel != UIWindowLevelNormal)
    {
        NSArray *windows = [[UIApplication sharedApplication] windows];
        for(UIWindow * tmpWin in windows)
        {
            if (tmpWin.windowLevel == UIWindowLevelNormal)
            {
                window = tmpWin;
                break;
            }
        }
    }
   return  (UINavigationController *)window.rootViewController;
}
//+(void)login
//{
//    if ([GlobalKit shareKit].accessToken)
//    {
//        [EZOPENSDK setAccessToken:[GlobalKit shareKit].accessToken];
//        NSLog(@"login---1");
//    }
//    else
//    {
//        [EZOPENSDK openLoginPage:^(EZAccessToken *accessToken) {
//            [[GlobalKit shareKit] setAccessToken:accessToken.accessToken];
//            [EZOPENSDK setAccessToken:accessToken.accessToken];
//            NSLog(@"login---2");
//        }];
//    }
//}
+(void)go2EZvizMonitor
{
        NSLog(@"go2EZvizMonitor");
//    if (isPad) {
//        //获取EZMain的stroyboard文件
//        UIStoryboard *ezMainStoryboard = [UIStoryboard storyboardWithName:@"EZMainForIPad" bundle:nil];
//        //获取EZMain.storyboard的实例ViewController--获取摄像头列表
//        EZDeviceTableViewController *instanceVC = [ezMainStoryboard instantiateViewControllerWithIdentifier:@"EZCameraList"];
//        //push摄像头列表的viewController
//        [[self getCurrentVC] setNavigationBarHidden:NO];
//        [[self getCurrentVC] pushViewController:instanceVC animated:YES];
//    }else{
        //获取EZMain的stroyboard文件
        UIStoryboard *ezMainStoryboard = [UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
        //获取EZMain.storyboard的实例ViewController--获取摄像头列表
        EZDeviceTableViewController *instanceVC = [ezMainStoryboard instantiateViewControllerWithIdentifier:@"EZCameraList"];
        //push摄像头列表的viewController
        [[self getCurrentVC] setNavigationBarHidden:NO];
        NSLog(@"willpush********");
        [[self getCurrentVC] pushViewController:instanceVC animated:YES];
        NSLog(@"had pushed********");
//    }
}
//+(NSArray *)getDeviceList:(int)pageIndex :(int)pageSize
//{
@@ -221,87 +261,21 @@
//    return deviceListaArray  ;
//}
+(void)addEzvizMonitor
{
    NSLog(@"添加摄像头");
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
        UIStoryboard *addDeviceStoryBoard = [UIStoryboard storyboardWithName:@"AddDevice" bundle:nil];
        EZAddByQRCodeViewController *rootViewController = [addDeviceStoryBoard instantiateViewControllerWithIdentifier:@"AddByQRCode"];
        [[self getCurrentVC] setNavigationBarHidden:NO];
        [[self getCurrentVC] pushViewController:rootViewController animated:YES];
    } else {
//        [UIView dd_showMessage:@"iOS 7.0以下扫码功能请自行实现"];
        NSLog(@"iOS 7.0以下扫码功能请自行实现");
    }
}
+(void)Play:(NSObject*)deviceInfo
{
//    if (isPad) {
//        NSLog(@"play--ipad--");
//        UIStoryboard *addDeviceStoryBoard = [UIStoryboard storyboardWithName:@"EZMainForIPad" bundle:nil];
//        EZLivePlayViewController *rootViewController = [addDeviceStoryBoard instantiateViewControllerWithIdentifier:@"EZLivePlayViewController"];
//        rootViewController.deviceInfo=(EZDeviceInfo *)deviceInfo;
//        rootViewController.cameraIndex=0;
//        [[self getCurrentVC] setNavigationBarHidden:NO];
//        [[self getCurrentVC] pushViewController:rootViewController animated:YES];
//    }else{
        NSLog(@"play--iphone--1225");
        UIStoryboard *addDeviceStoryBoard = [UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
        EZLivePlayViewController *rootViewController = [addDeviceStoryBoard instantiateViewControllerWithIdentifier:@"EZLivePlayViewController"];
        NSLog(@"play--iphone--rootViewController");
        rootViewController.deviceInfo=(EZDeviceInfo *)deviceInfo;
         NSLog(@"play--iphone--deviceName -%@",rootViewController.deviceInfo.deviceName);
//        rootViewController.cameraIndex=0;
        [[self getCurrentVC] setNavigationBarHidden:NO];
        [[self getCurrentVC] pushViewController:rootViewController animated:YES];
//+(void)login
//{
//    if ([GlobalKit shareKit].accessToken)
//    {
//        [EZOPENSDK setAccessToken:[GlobalKit shareKit].accessToken];
//        NSLog(@"login---1");
//    }
}
+(void)setting:(NSObject*)deviceInfo
{
//    if (isPad) {
//        UIStoryboard *settingStoryBoard=[UIStoryboard storyboardWithName:@"EZMainForIPad" bundle:nil];
//        EZSettingViewController *settingVC=[settingStoryBoard instantiateViewControllerWithIdentifier:@"EZSettingViewController"];
//        settingVC.deviceInfo=(EZDeviceInfo *)deviceInfo;
//        [[self getCurrentVC] setNavigationBarHidden:NO];
//        [[self getCurrentVC] pushViewController:settingVC animated:YES];
//    }else{
        UIStoryboard *settingStoryBoard=[UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
        EZSettingViewController *settingVC=[settingStoryBoard instantiateViewControllerWithIdentifier:@"EZSettingViewController"];
        settingVC.deviceInfo=(EZDeviceInfo *)deviceInfo;
        [[self getCurrentVC] setNavigationBarHidden:NO];
        [[self getCurrentVC] pushViewController:settingVC animated:YES];
//    else
//    {
//        [EZOPENSDK openLoginPage:^(EZAccessToken *accessToken) {
//            [[GlobalKit shareKit] setAccessToken:accessToken.accessToken];
//            [EZOPENSDK setAccessToken:accessToken.accessToken];
//            NSLog(@"login---2");
//        }];
//    }
}
+(void)playBackVideo:(NSObject*)deviceInfo
{
//    if (isPad) {
//        UIStoryboard *playBackStoryBoard=[UIStoryboard storyboardWithName:@"EZMainForIPad" bundle:nil];
//        EZPlaybackViewController *playBackVC=[playBackStoryBoard instantiateViewControllerWithIdentifier:@"EZPlaybackViewController"];
//        playBackVC.deviceInfo=(EZDeviceInfo *)deviceInfo;
//        playBackVC.cameraIndex=0;
//        [[self getCurrentVC] setNavigationBarHidden:NO];
//        [[self getCurrentVC] pushViewController:playBackVC animated:YES];
//    }else{
        UIStoryboard *playBackStoryBoard=[UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
        EZPlaybackViewController *playBackVC=[playBackStoryBoard instantiateViewControllerWithIdentifier:@"EZPlaybackViewController"];
        playBackVC.deviceInfo=(EZDeviceInfo *)deviceInfo;
//        playBackVC.cameraIndex=0;
        [[self getCurrentVC] setNavigationBarHidden:NO];
        [[self getCurrentVC] pushViewController:playBackVC animated:YES];
//    }
}
//}
@end