25 文件已复制
20个文件已添加
35个文件已删除
76个文件已修改
45 文件已重命名
| | |
| | | 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 */; }; |
| | |
| | | 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 */; }; |
| | |
| | | 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>"; }; |
| | |
| | | 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; }; |
| | |
| | | 0D8CF3A91BDF516700A50266 /* Venders */ = { |
| | | isa = PBXGroup; |
| | | children = ( |
| | | B9EA4E0625C7E7AA000FFDA2 /* MJRefresh */, |
| | | C4A41D7C23D6E4DC00D59722 /* Toast */, |
| | | 0D9ACAD31C7EE4D100B4DE97 /* UIKit+AFNetworking */, |
| | | 0D2E4B991C7DB2E200CA948A /* AFNetworking */, |
| | |
| | | 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 */ = { |
| | |
| | | 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 = ( |
| | |
| | | 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 */, |
| | |
| | | 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 */, |
| | |
| | | 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 */, |
| | |
| | | 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 */, |
| | |
| | | 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 */, |
| | |
| | | 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 */, |
| | |
| | | 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 */, |
| | |
| | | |
| | | // [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]); |
| | |
| | | <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"/> |
| | |
| | | <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"/> |
| | |
| | | <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"/> |
| | |
| | | <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"/> |
| | |
| | | "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."; |
| | |
| | | |
| | | #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 |
| | | |
| | |
| | | // [self.cameraImageView sd_setImageWithURL:[NSURL URLWithString:url]]; |
| | | // } |
| | | // }]; |
| | | // [EZOPENSDK cap] |
| | | |
| | | self.messageButton.hidden = NO; |
| | | self.settingButton.hidden = NO; |
| | |
| | | // 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; |
| | | }]; |
| | |
| | | // 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; |
| | |
| | | NSLog(@"error = %@",error); |
| | | if(!error) |
| | | { |
| | | // self.cameraInfo.deviceName = self.deviceNameTextField.text; |
| | | self.deviceInfo.deviceName = self.deviceNameTextField.text; |
| | | [self.navigationController popViewControllerAnimated:YES]; |
| | | } |
| | | }]; |
| | |
| | | |
| | | NSLog(@"GetStreamFetchType:%d", [self.player getStreamFetchType]); |
| | | |
| | | [self showStreamFetchType]; |
| | | // [self showStreamFetchType]; |
| | | } |
| | | else if (messageCode == PLAYER_PLAYBACK_STOP) |
| | | { |
| | |
| | | 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) |
| | | { |
New file |
| | |
| | | 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. |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.h |
| | |
| | | @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 |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.m |
| | |
| | | #import "MJRefreshAutoFooter.h" |
| | | |
| | | @interface MJRefreshAutoFooter() |
| | | /** 一个新的拖拽 */ |
| | | @property (assign, nonatomic, getter=isOneNewPan) BOOL oneNewPan; |
| | | @end |
| | | |
| | | @implementation MJRefreshAutoFooter |
| | |
| | | |
| | | // 设置为默认状态 |
| | | self.automaticallyRefresh = YES; |
| | | |
| | | // 默认是当offset达到条件就发送请求(可连续) |
| | | self.onlyRefreshPerDrag = NO; |
| | | } |
| | | |
| | | - (void)scrollViewContentSizeDidChange:(NSDictionary *)change |
| | |
| | | |
| | | 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]; |
| | |
| | | [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 |
| | |
| | | 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(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshBackFooter.m |
| | |
| | | // 如果正在刷新,直接返回 |
| | | if (self.state == MJRefreshStateRefreshing) return; |
| | | |
| | | _scrollViewOriginalInset = self.scrollView.contentInset; |
| | | _scrollViewOriginalInset = self.scrollView.mj_inset; |
| | | |
| | | // 当前的contentOffset |
| | | CGFloat currentOffsetY = self.scrollView.mj_offsetY; |
| | |
| | | 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; |
| | |
| | | }]; |
| | | } |
| | | } |
| | | |
| | | #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 |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.h |
| | |
| | | #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, |
| | | /** 松开就可以进行刷新的状态 */ |
| | |
| | | MJRefreshStateWillRefresh, |
| | | /** 所有数据加载完毕,没有更多的数据了 */ |
| | | MJRefreshStateNoMoreData |
| | | } MJRefreshState; |
| | | }; |
| | | |
| | | /** 进入刷新状态的回调 */ |
| | | typedef void (^MJRefreshComponentRefreshingBlock)(); |
| | | typedef void (^MJRefreshComponentRefreshingBlock)(void); |
| | | /** 开始刷新后的回调(进入刷新状态后的回调) */ |
| | | typedef void (^MJRefreshComponentbeginRefreshingCompletionBlock)(void); |
| | | /** 结束刷新后的回调 */ |
| | | typedef void (^MJRefreshComponentEndRefreshingCompletionBlock)(void); |
| | | |
| | | /** 刷新控件的基类 */ |
| | | @interface MJRefreshComponent : UIView |
| | |
| | | @property (copy, nonatomic) MJRefreshComponentRefreshingBlock refreshingBlock; |
| | | /** 设置回调对象和回调方法 */ |
| | | - (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action; |
| | | |
| | | /** 回调对象 */ |
| | | @property (weak, nonatomic) id refreshingTarget; |
| | | /** 回调方法 */ |
| | |
| | | #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; |
| | | |
| | |
| | | @end |
| | | |
| | | @interface UILabel(MJRefresh) |
| | | + (instancetype)label; |
| | | + (instancetype)mj_label; |
| | | - (CGFloat)mj_textWith; |
| | | @end |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.m |
| | |
| | | |
| | | #import "MJRefreshComponent.h" |
| | | #import "MJRefreshConst.h" |
| | | #import "UIView+MJExtension.h" |
| | | #import "UIScrollView+MJRefresh.h" |
| | | |
| | | @interface MJRefreshComponent() |
| | | @property (strong, nonatomic) UIPanGestureRecognizer *pan; |
| | |
| | | |
| | | - (void)layoutSubviews |
| | | { |
| | | [super layoutSubviews]; |
| | | |
| | | [self placeSubviews]; |
| | | |
| | | [super layoutSubviews]; |
| | | } |
| | | |
| | | - (void)placeSubviews{} |
| | |
| | | // 设置宽度 |
| | | 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]; |
| | |
| | | - (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; |
| | | } |
| | |
| | | self.refreshingAction = action; |
| | | } |
| | | |
| | | - (void)setState:(MJRefreshState)state |
| | | { |
| | | _state = state; |
| | | |
| | | // 加入主队列的目的是等setState:方法调用完毕、设置完文字后再去布局子控件 |
| | | dispatch_async(dispatch_get_main_queue(), ^{ |
| | | [self setNeedsLayout]; |
| | | }); |
| | | } |
| | | |
| | | #pragma mark 进入刷新状态 |
| | | - (void)beginRefreshing |
| | | { |
| | |
| | | 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 是否正在刷新 |
| | |
| | | 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; |
| | |
| | | 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 |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.h |
| | |
| | | /** 忽略多少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 |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.m |
| | |
| | | // |
| | | |
| | | #import "MJRefreshFooter.h" |
| | | #include "UIScrollView+MJRefresh.h" |
| | | |
| | | @interface MJRefreshFooter() |
| | | |
| | |
| | | // 设置自己的高度 |
| | | self.mj_h = MJRefreshFooterHeight; |
| | | |
| | | // 默认是自动隐藏 |
| | | self.automaticallyHidden = YES; |
| | | // 默认不会自动隐藏 |
| | | self.automaticallyHidden = NO; |
| | | } |
| | | |
| | | - (void)willMoveToSuperview:(UIView *)newSuperview |
| | |
| | | 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); |
| | | } |
| | |
| | | #pragma mark - 公共方法 |
| | | - (void)endRefreshingWithNoMoreData |
| | | { |
| | | self.state = MJRefreshStateNoMoreData; |
| | | dispatch_async(dispatch_get_main_queue(), ^{ |
| | | self.state = MJRefreshStateNoMoreData; |
| | | }); |
| | | } |
| | | |
| | | - (void)noticeNoMoreData |
| | |
| | | |
| | | - (void)resetNoMoreData |
| | | { |
| | | self.state = MJRefreshStateIdle; |
| | | dispatch_async(dispatch_get_main_queue(), ^{ |
| | | self.state = MJRefreshStateIdle; |
| | | }); |
| | | } |
| | | |
| | | - (void)setAutomaticallyHidden:(BOOL)automaticallyHidden |
| | | { |
| | | _automaticallyHidden = automaticallyHidden; |
| | | } |
| | | @end |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshHeader.m |
| | |
| | | #import "MJRefreshHeader.h" |
| | | |
| | | @interface MJRefreshHeader() |
| | | |
| | | @property (assign, nonatomic) CGFloat insetTDelta; |
| | | @end |
| | | |
| | | @implementation MJRefreshHeader |
| | |
| | | |
| | | // 在刷新的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; |
| | |
| | | |
| | | // 恢复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]; |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h |
| | |
| | | #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; |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m |
| | |
| | | #import "MJRefreshAutoGifFooter.h" |
| | | |
| | | @interface MJRefreshAutoGifFooter() |
| | | @property (weak, nonatomic) UIImageView *gifView; |
| | | { |
| | | __unsafe_unretained UIImageView *_gifView; |
| | | } |
| | | /** 所有状态对应的动画图片 */ |
| | | @property (strong, nonatomic) NSMutableDictionary *stateImages; |
| | | /** 所有状态对应的动画时间 */ |
| | |
| | | } |
| | | |
| | | #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; |
| | | } |
| | | } |
| | | |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m |
| | |
| | | self.loadingView = nil; |
| | | [self setNeedsLayout]; |
| | | } |
| | | #pragma makr - 重写父类的方法 |
| | | #pragma mark - 重写父类的方法 |
| | | - (void)prepare |
| | | { |
| | | [super prepare]; |
| | |
| | | { |
| | | [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 |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h |
| | |
| | | #import "MJRefreshAutoFooter.h" |
| | | |
| | | @interface MJRefreshAutoStateFooter : MJRefreshAutoFooter |
| | | /** 文字距离圈圈、箭头的距离 */ |
| | | @property (assign, nonatomic) CGFloat labelLeftInset; |
| | | /** 显示刷新状态的label */ |
| | | @property (weak, nonatomic, readonly) UILabel *stateLabel; |
| | | |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m |
| | |
| | | @interface MJRefreshAutoStateFooter() |
| | | { |
| | | /** 显示刷新状态的label */ |
| | | __weak UILabel *_stateLabel; |
| | | __unsafe_unretained UILabel *_stateLabel; |
| | | } |
| | | /** 所有状态对应的文字 */ |
| | | @property (strong, nonatomic) NSMutableDictionary *stateTitles; |
| | |
| | | - (UILabel *)stateLabel |
| | | { |
| | | if (!_stateLabel) { |
| | | [self addSubview:_stateLabel = [UILabel label]]; |
| | | [self addSubview:_stateLabel = [UILabel mj_label]]; |
| | | } |
| | | return _stateLabel; |
| | | } |
| | |
| | | { |
| | | [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; |
| | |
| | | { |
| | | [super placeSubviews]; |
| | | |
| | | if (self.stateLabel.constraints.count) return; |
| | | |
| | | // 状态标签 |
| | | self.stateLabel.frame = self.bounds; |
| | | } |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h |
| | |
| | | #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; |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m |
| | |
| | | #import "MJRefreshBackGifFooter.h" |
| | | |
| | | @interface MJRefreshBackGifFooter() |
| | | @property (weak, nonatomic) UIImageView *gifView; |
| | | { |
| | | __unsafe_unretained UIImageView *_gifView; |
| | | } |
| | | /** 所有状态对应的动画图片 */ |
| | | @property (strong, nonatomic) NSMutableDictionary *stateImages; |
| | | /** 所有状态对应的动画时间 */ |
| | |
| | | } |
| | | |
| | | #pragma mark - 实现父类的方法 |
| | | - (void)prepare |
| | | { |
| | | [super prepare]; |
| | | |
| | | // 初始化间距 |
| | | self.labelLeftInset = 20; |
| | | } |
| | | |
| | | - (void)setPullingPercent:(CGFloat)pullingPercent |
| | | { |
| | | [super setPullingPercent:pullingPercent]; |
| | |
| | | { |
| | | [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; |
| | | } |
| | | } |
| | | |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m |
| | |
| | | // |
| | | |
| | | #import "MJRefreshBackNormalFooter.h" |
| | | #import "NSBundle+MJRefresh.h" |
| | | |
| | | @interface MJRefreshBackNormalFooter() |
| | | { |
| | | __weak UIImageView *_arrowView; |
| | | __unsafe_unretained UIImageView *_arrowView; |
| | | } |
| | | @property (weak, nonatomic) UIActivityIndicatorView *loadingView; |
| | | @end |
| | |
| | | - (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; |
| | |
| | | self.loadingView = nil; |
| | | [self setNeedsLayout]; |
| | | } |
| | | #pragma makr - 重写父类的方法 |
| | | #pragma mark - 重写父类的方法 |
| | | - (void)prepare |
| | | { |
| | | [super prepare]; |
| | |
| | | { |
| | | [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 |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h |
| | |
| | | #import "MJRefreshBackFooter.h" |
| | | |
| | | @interface MJRefreshBackStateFooter : MJRefreshBackFooter |
| | | /** 文字距离圈圈、箭头的距离 */ |
| | | @property (assign, nonatomic) CGFloat labelLeftInset; |
| | | /** 显示刷新状态的label */ |
| | | @property (weak, nonatomic, readonly) UILabel *stateLabel; |
| | | /** 设置state状态下的文字 */ |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m |
| | |
| | | @interface MJRefreshBackStateFooter() |
| | | { |
| | | /** 显示刷新状态的label */ |
| | | __weak UILabel *_stateLabel; |
| | | __unsafe_unretained UILabel *_stateLabel; |
| | | } |
| | | /** 所有状态对应的文字 */ |
| | | @property (strong, nonatomic) NSMutableDictionary *stateTitles; |
| | |
| | | - (UILabel *)stateLabel |
| | | { |
| | | if (!_stateLabel) { |
| | | [self addSubview:_stateLabel = [UILabel label]]; |
| | | [self addSubview:_stateLabel = [UILabel mj_label]]; |
| | | } |
| | | return _stateLabel; |
| | | } |
| | |
| | | { |
| | | [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; |
| | | } |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h |
| | |
| | | #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; |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m |
| | |
| | | #import "MJRefreshGifHeader.h" |
| | | |
| | | @interface MJRefreshGifHeader() |
| | | @property (weak, nonatomic) UIImageView *gifView; |
| | | { |
| | | __unsafe_unretained UIImageView *_gifView; |
| | | } |
| | | /** 所有状态对应的动画图片 */ |
| | | @property (strong, nonatomic) NSMutableDictionary *stateImages; |
| | | /** 所有状态对应的动画时间 */ |
| | |
| | | } |
| | | |
| | | #pragma mark - 实现父类的方法 |
| | | - (void)prepare |
| | | { |
| | | [super prepare]; |
| | | |
| | | // 初始化间距 |
| | | self.labelLeftInset = 20; |
| | | } |
| | | |
| | | - (void)setPullingPercent:(CGFloat)pullingPercent |
| | | { |
| | | [super setPullingPercent:pullingPercent]; |
| | |
| | | { |
| | | [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; |
| | | } |
| | | } |
| | | |
| | |
| | | self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; |
| | | [self.gifView startAnimating]; |
| | | } |
| | | } else if (state == MJRefreshStateIdle) { |
| | | [self.gifView stopAnimating]; |
| | | } |
| | | } |
| | | @end |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m |
| | |
| | | // |
| | | |
| | | #import "MJRefreshNormalHeader.h" |
| | | #import "NSBundle+MJRefresh.h" |
| | | |
| | | @interface MJRefreshNormalHeader() |
| | | { |
| | | __weak UIImageView *_arrowView; |
| | | __unsafe_unretained UIImageView *_arrowView; |
| | | } |
| | | @property (weak, nonatomic) UIActivityIndicatorView *loadingView; |
| | | @end |
| | |
| | | - (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; |
| | |
| | | [self setNeedsLayout]; |
| | | } |
| | | |
| | | #pragma makr - 重写父类的方法 |
| | | #pragma mark - 重写父类的方法 |
| | | - (void)prepare |
| | | { |
| | | [super prepare]; |
| | |
| | | { |
| | | [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 |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h |
| | |
| | | @property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel; |
| | | |
| | | #pragma mark - 状态相关 |
| | | /** 文字距离圈圈、箭头的距离 */ |
| | | @property (assign, nonatomic) CGFloat labelLeftInset; |
| | | /** 显示刷新状态的label */ |
| | | @property (weak, nonatomic, readonly) UILabel *stateLabel; |
| | | /** 设置state状态下的文字 */ |
New file |
| | |
| | | // |
| | | // 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 |
New file |
| | |
| | | "MJRefreshHeaderIdleText" = "下拉可以刷新"; |
| | | "MJRefreshHeaderPullingText" = "鬆開立即刷新"; |
| | | "MJRefreshHeaderRefreshingText" = "正在刷新數據中..."; |
| | | |
| | | "MJRefreshAutoFooterIdleText" = "點擊或上拉加載更多"; |
| | | "MJRefreshAutoFooterRefreshingText" = "正在加載更多的數據..."; |
| | | "MJRefreshAutoFooterNoMoreDataText" = "已經全部加載完畢"; |
| | | |
| | | "MJRefreshBackFooterIdleText" = "上拉可以加載更多"; |
| | | "MJRefreshBackFooterPullingText" = "鬆開立即加載更多"; |
| | | "MJRefreshBackFooterRefreshingText" = "正在加載更多的數據..."; |
| | | "MJRefreshBackFooterNoMoreDataText" = "已經全部加載完畢"; |
| | | |
| | | "MJRefreshHeaderLastTimeText" = "最後更新:"; |
| | | "MJRefreshHeaderDateTodayText" = "今天"; |
| | | "MJRefreshHeaderNoneLastDateText" = "無記錄"; |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.h |
| | |
| | | #import <UIKit/UIKit.h> |
| | | #import <objc/message.h> |
| | | |
| | | // 弱引用 |
| | | #define MJWeakSelf __weak typeof(self) weakSelf = self; |
| | | |
| | | // 日志输出 |
| | | #ifdef DEBUG |
| | | #define MJRefreshLog(...) NSLog(__VA_ARGS__) |
| | |
| | | // 字体大小 |
| | | #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; |
| | |
| | | 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; \ |
New file |
| | |
| | | // 代码地址: 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"; |
New file |
| | |
| | | // |
| | | // 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 |
New file |
| | |
| | | // |
| | | // 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 |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.h |
| | |
| | | #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; |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.m |
| | |
| | | #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 |
| | |
| | | return self.contentSize.height; |
| | | } |
| | | @end |
| | | #pragma clang diagnostic pop |
New file |
| | |
| | | // 代码地址: 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 |
File was renamed from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.m |
| | |
| | | |
| | | #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]]) { |
| | |
| | | } |
| | | |
| | | 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 |
| | | |
New file |
| | |
| | |  |
| | | ## 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 |
| | |  |
| | | - `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]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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 |
| | | ``` |
| | |  |
| | | |
| | | ## <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)]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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)]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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 |
| | | ``` |
| | |  |
| | | |
| | | ## <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 |
| | | ``` |
| | |  |
| | | |
| | | ## <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 |
| | | }]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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 |
| | | }]; |
| | | ``` |
| | |  |
| | | |
| | | ## 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”) |
| | |  |
| | | * StepO2 |
| | |  |
| | | * StepO3 |
| | |  |
| | | * StepO4 |
| | |  |
old mode 100644
new mode 100755
old mode 100644
new mode 100755
| | |
| | | |
| | | #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) { |
| | |
| | | } |
| | | } |
| | | |
| | | - (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; |
old mode 100644
new mode 100755
old mode 100644
new mode 100755
| | |
| | | /** |
| | | * 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; |
| | |
| | | /** |
| | | * 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 |
| | |
| | | - (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; |
| | |
| | | /** |
| | | * 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; |
| | |
| | | |
| | | // 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 |
| | | */ |
old mode 100644
new mode 100755
| | |
| | | |
| | | #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; |
| | |
| | | - (MASConstraint * (^)(MASEdgeInsets))insets { |
| | | return ^id(MASEdgeInsets insets){ |
| | | self.insets = insets; |
| | | return self; |
| | | }; |
| | | } |
| | | |
| | | - (MASConstraint * (^)(CGFloat))inset { |
| | | return ^id(CGFloat inset){ |
| | | self.inset = inset; |
| | | return self; |
| | | }; |
| | | } |
| | |
| | | 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]; |
| | |
| | | |
| | | - (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(); } |
| | | |
old mode 100644
new mode 100755
| | |
| | | // |
| | | // MASConstraintBuilder.h |
| | | // MASConstraintMaker.h |
| | | // Masonry |
| | | // |
| | | // Created by Jonas Budelmann on 20/07/13. |
| | |
| | | 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, |
| | |
| | | @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; |
| | |
| | | /** |
| | | * 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 |
| | | */ |
old mode 100644
new mode 100755
| | |
| | | // |
| | | // MASConstraintBuilder.m |
| | | // MASConstraintMaker.m |
| | | // Masonry |
| | | // |
| | | // Created by Jonas Budelmann on 20/07/13. |
| | |
| | | __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 |
| | |
| | | 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]; |
| | |
| | | }; |
| | | } |
| | | |
| | | #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]; |
old mode 100644
new mode 100755
old mode 100644
new mode 100755
old mode 100644
new mode 100755
| | |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | |
| | | #if TARGET_OS_IPHONE |
| | | |
| | | |
| | | #if TARGET_OS_IPHONE || TARGET_OS_TV |
| | | |
| | | #import <UIKit/UIKit.h> |
| | | #define MAS_VIEW UIView |
| | |
| | | * |
| | | * 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]; \ |
| | | } \ |
| | | } |
| | | |
| | | /** |
old mode 100644
new mode 100755
| | |
| | | // |
| | | // MASAttribute.h |
| | | // MASViewAttribute.h |
| | | // Masonry |
| | | // |
| | | // Created by Jonas Budelmann on 21/07/13. |
old mode 100644
new mode 100755
| | |
| | | // |
| | | // MASAttribute.m |
| | | // MASViewAttribute.m |
| | | // Masonry |
| | | // |
| | | // Created by Jonas Budelmann on 21/07/13. |
old mode 100644
new mode 100755
| | |
| | | // |
| | | // MASConstraint.h |
| | | // MASViewConstraint.h |
| | | // Masonry |
| | | // |
| | | // Created by Jonas Budelmann on 20/07/13. |
old mode 100644
new mode 100755
| | |
| | | // |
| | | // MASConstraint.m |
| | | // MASViewConstraint.m |
| | | // Masonry |
| | | // |
| | | // Created by Jonas Budelmann on 20/07/13. |
| | |
| | | - (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 { |
| | |
| | | NSMutableArray *children = NSMutableArray.new; |
| | | for (id attr in attribute) { |
| | | MASViewConstraint *viewConstraint = [self copy]; |
| | | viewConstraint.layoutRelation = relation; |
| | | viewConstraint.secondViewAttribute = attr; |
| | | [children addObject:viewConstraint]; |
| | | } |
| | |
| | | |
| | | #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; |
| | |
| | | } |
| | | } |
| | | |
| | | - (void)setInset:(CGFloat)inset { |
| | | [self setInsets:(MASEdgeInsets){.top = inset, .left = inset, .bottom = inset, .right = inset}]; |
| | | } |
| | | |
| | | - (void)setOffset:(CGFloat)offset { |
| | | self.layoutConstant = offset; |
| | | } |
| | |
| | | #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; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | - (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; |
old mode 100644
new mode 100755
old mode 100644
new mode 100755
| | |
| | | * |
| | | * @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. |
| | |
| | | * |
| | | * @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. |
| | |
| | | * |
| | | * @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 |
old mode 100644
new mode 100755
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | 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; |
old mode 100644
new mode 100755
old mode 100644
new mode 100755
old mode 100644
new mode 100755
| | |
| | | @(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", |
| | |
| | | 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", |
| | |
| | | |
| | | [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) { |
| | |
| | | } |
| | | |
| | | 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:@">"]; |
old mode 100644
new mode 100755
| | |
| | | @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; |
| | |
| | | @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 |
| | | |
| | |
| | | * |
| | | * @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. |
| | |
| | | * |
| | | * @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. |
| | |
| | | * |
| | | * @return Array of created/updated MASConstraints |
| | | */ |
| | | - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block; |
| | | - (NSArray *)mas_remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block; |
| | | |
| | | @end |
old mode 100644
new mode 100755
| | |
| | | }; |
| | | } |
| | | |
| | | #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]; |
| | |
| | | |
| | | #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 { |
old mode 100644
new mode 100755
| | |
| | | @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; |
| | |
| | | @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 |
| | | |
| | |
| | | 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); |
| | |
| | | |
| | | #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]; |
| | | } |
| | | |
old mode 100644
new mode 100755
old mode 100644
new mode 100755
| | |
| | | |
| | | "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"; |
| | |
| | | "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"; |
| | |
| | | /* 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"; */ |
| | |
| | | /* 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]" = "我的"; |
| | |
| | | /* 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" = "空空如也"; |
| | |
| | | /* |
| | | Localizable.strings |
| | | EZOpenSDKDemo |
| | | EZOpenSDK |
| | | |
| | | Created by linyong on 2017/9/7. |
| | | Copyright © 2017年 Ezviz. All rights reserved. |
| | |
| | | [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); |
| | | } |
| | | } |
| | | |
| | |
| | | // 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. |
| | |
| | | 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 */; }; |
| | |
| | | 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 */; }; |
| | |
| | | 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 */; }; |
| | |
| | | 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 */ |
| | |
| | | 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>"; }; |
| | |
| | | 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>"; }; |
| | |
| | | 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>"; }; |
| | |
| | | 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>"; }; |
| | |
| | | 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 */ |
| | |
| | | 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>"; |
| | |
| | | B9BC97D425C0FFB600C024FE /* Venders */ = { |
| | | isa = PBXGroup; |
| | | children = ( |
| | | B9EA4E5325C7E805000FFDA2 /* MJRefresh */, |
| | | B9BC97D525C0FFB600C024FE /* UITableView-FDTemplateLayoutCell */, |
| | | B9BC97DE25C0FFB600C024FE /* DACircularProgress */, |
| | | B9BC97E325C0FFB600C024FE /* DDCollectionViewFlowLayout */, |
| | | B9BC97E625C0FFB600C024FE /* MJRefresh */, |
| | | B9BC981325C0FFB600C024FE /* Toast */, |
| | | B9BC981625C0FFB600C024FE /* MWPhotoBrowser */, |
| | | B9BC982C25C0FFB700C024FE /* Masonry */, |
| | |
| | | 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 = ( |
| | |
| | | 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>"; |
| | |
| | | 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>"; |
| | |
| | | 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 */ |
| | |
| | | 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 */, |
| | |
| | | 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 */, |
| | |
| | | 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 */, |
| | |
| | | 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 */, |
| | |
| | | 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 */, |
| | |
| | | |
| | | #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 |
| | |
| | | |
| | | @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; |
| | |
| | | - (void)viewWillAppear:(BOOL)animated |
| | | { |
| | | [super viewWillAppear:animated]; |
| | | |
| | | // self.navigationController.navigationBarHidden = NO;//2021-02-01 |
| | | |
| | | if (_needRefresh) |
| | | { |
| | | _needRefresh = NO; |
| | |
| | | // 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]; |
| | |
| | | NSLog(@"error = %@",error); |
| | | if(!error) |
| | | { |
| | | // self.cameraInfo.deviceName = self.deviceNameTextField.text; |
| | | self.deviceInfo.deviceName = self.deviceNameTextField.text; |
| | | [self.navigationController popViewControllerAnimated:YES]; |
| | | } |
| | | }]; |
| | |
| | | |
| | | - (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) |
| | |
| | | |
| | | NSLog(@"GetStreamFetchType:%d", [self.player getStreamFetchType]); |
| | | |
| | | [self showStreamFetchType]; |
| | | // [self showStreamFetchType]; |
| | | } |
| | | else if (messageCode == PLAYER_PLAYBACK_STOP) |
| | | { |
| | |
| | | |
| | | - (void)viewWillAppear:(BOOL)animated { |
| | | [super viewWillAppear:animated]; |
| | | // self.navigationController.navigationBarHidden = NO;//2021-02-01 |
| | | [self.tableView reloadData]; |
| | | } |
| | | |
| | |
| | | [_timer invalidate]; |
| | | _timer = nil; |
| | | } |
| | | |
| | | // self.navigationController.navigationBarHidden = YES;//2021-02-01 添加隐藏navigationBarHidden |
| | | [super viewWillDisappear:animated]; |
| | | } |
| | | |
| | |
| | | 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) |
| | | { |
New file |
| | |
| | | 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. |
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 |
| | |
| | | @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 |
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 |
| | |
| | | #import "MJRefreshAutoFooter.h" |
| | | |
| | | @interface MJRefreshAutoFooter() |
| | | /** 一个新的拖拽 */ |
| | | @property (assign, nonatomic, getter=isOneNewPan) BOOL oneNewPan; |
| | | @end |
| | | |
| | | @implementation MJRefreshAutoFooter |
| | |
| | | |
| | | // 设置为默认状态 |
| | | self.automaticallyRefresh = YES; |
| | | |
| | | // 默认是当offset达到条件就发送请求(可连续) |
| | | self.onlyRefreshPerDrag = NO; |
| | | } |
| | | |
| | | - (void)scrollViewContentSizeDidChange:(NSDictionary *)change |
| | |
| | | |
| | | 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]; |
| | |
| | | [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 |
| | |
| | | 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(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
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 |
| | |
| | | // 如果正在刷新,直接返回 |
| | | if (self.state == MJRefreshStateRefreshing) return; |
| | | |
| | | _scrollViewOriginalInset = self.scrollView.contentInset; |
| | | _scrollViewOriginalInset = self.scrollView.mj_inset; |
| | | |
| | | // 当前的contentOffset |
| | | CGFloat currentOffsetY = self.scrollView.mj_offsetY; |
| | |
| | | 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; |
| | |
| | | }]; |
| | | } |
| | | } |
| | | |
| | | #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 |
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 |
| | |
| | | #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, |
| | | /** 松开就可以进行刷新的状态 */ |
| | |
| | | MJRefreshStateWillRefresh, |
| | | /** 所有数据加载完毕,没有更多的数据了 */ |
| | | MJRefreshStateNoMoreData |
| | | } MJRefreshState; |
| | | }; |
| | | |
| | | /** 进入刷新状态的回调 */ |
| | | typedef void (^MJRefreshComponentRefreshingBlock)(); |
| | | typedef void (^MJRefreshComponentRefreshingBlock)(void); |
| | | /** 开始刷新后的回调(进入刷新状态后的回调) */ |
| | | typedef void (^MJRefreshComponentbeginRefreshingCompletionBlock)(void); |
| | | /** 结束刷新后的回调 */ |
| | | typedef void (^MJRefreshComponentEndRefreshingCompletionBlock)(void); |
| | | |
| | | /** 刷新控件的基类 */ |
| | | @interface MJRefreshComponent : UIView |
| | |
| | | @property (copy, nonatomic) MJRefreshComponentRefreshingBlock refreshingBlock; |
| | | /** 设置回调对象和回调方法 */ |
| | | - (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action; |
| | | |
| | | /** 回调对象 */ |
| | | @property (weak, nonatomic) id refreshingTarget; |
| | | /** 回调方法 */ |
| | |
| | | #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; |
| | | |
| | |
| | | @end |
| | | |
| | | @interface UILabel(MJRefresh) |
| | | + (instancetype)label; |
| | | + (instancetype)mj_label; |
| | | - (CGFloat)mj_textWith; |
| | | @end |
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 |
| | |
| | | |
| | | #import "MJRefreshComponent.h" |
| | | #import "MJRefreshConst.h" |
| | | #import "UIView+MJExtension.h" |
| | | #import "UIScrollView+MJRefresh.h" |
| | | |
| | | @interface MJRefreshComponent() |
| | | @property (strong, nonatomic) UIPanGestureRecognizer *pan; |
| | |
| | | |
| | | - (void)layoutSubviews |
| | | { |
| | | [super layoutSubviews]; |
| | | |
| | | [self placeSubviews]; |
| | | |
| | | [super layoutSubviews]; |
| | | } |
| | | |
| | | - (void)placeSubviews{} |
| | |
| | | // 设置宽度 |
| | | 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]; |
| | |
| | | - (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; |
| | | } |
| | |
| | | self.refreshingAction = action; |
| | | } |
| | | |
| | | - (void)setState:(MJRefreshState)state |
| | | { |
| | | _state = state; |
| | | |
| | | // 加入主队列的目的是等setState:方法调用完毕、设置完文字后再去布局子控件 |
| | | dispatch_async(dispatch_get_main_queue(), ^{ |
| | | [self setNeedsLayout]; |
| | | }); |
| | | } |
| | | |
| | | #pragma mark 进入刷新状态 |
| | | - (void)beginRefreshing |
| | | { |
| | |
| | | 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 是否正在刷新 |
| | |
| | | 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; |
| | |
| | | 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 |
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 |
| | |
| | | /** 忽略多少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 |
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 |
| | |
| | | // |
| | | |
| | | #import "MJRefreshFooter.h" |
| | | #include "UIScrollView+MJRefresh.h" |
| | | |
| | | @interface MJRefreshFooter() |
| | | |
| | |
| | | // 设置自己的高度 |
| | | self.mj_h = MJRefreshFooterHeight; |
| | | |
| | | // 默认是自动隐藏 |
| | | self.automaticallyHidden = YES; |
| | | // 默认不会自动隐藏 |
| | | self.automaticallyHidden = NO; |
| | | } |
| | | |
| | | - (void)willMoveToSuperview:(UIView *)newSuperview |
| | |
| | | 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); |
| | | } |
| | |
| | | #pragma mark - 公共方法 |
| | | - (void)endRefreshingWithNoMoreData |
| | | { |
| | | self.state = MJRefreshStateNoMoreData; |
| | | dispatch_async(dispatch_get_main_queue(), ^{ |
| | | self.state = MJRefreshStateNoMoreData; |
| | | }); |
| | | } |
| | | |
| | | - (void)noticeNoMoreData |
| | |
| | | |
| | | - (void)resetNoMoreData |
| | | { |
| | | self.state = MJRefreshStateIdle; |
| | | dispatch_async(dispatch_get_main_queue(), ^{ |
| | | self.state = MJRefreshStateIdle; |
| | | }); |
| | | } |
| | | |
| | | - (void)setAutomaticallyHidden:(BOOL)automaticallyHidden |
| | | { |
| | | _automaticallyHidden = automaticallyHidden; |
| | | } |
| | | @end |
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 |
| | |
| | | #import "MJRefreshHeader.h" |
| | | |
| | | @interface MJRefreshHeader() |
| | | |
| | | @property (assign, nonatomic) CGFloat insetTDelta; |
| | | @end |
| | | |
| | | @implementation MJRefreshHeader |
| | |
| | | |
| | | // 在刷新的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; |
| | |
| | | |
| | | // 恢复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]; |
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 |
| | |
| | | #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; |
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 |
| | |
| | | #import "MJRefreshAutoGifFooter.h" |
| | | |
| | | @interface MJRefreshAutoGifFooter() |
| | | @property (weak, nonatomic) UIImageView *gifView; |
| | | { |
| | | __unsafe_unretained UIImageView *_gifView; |
| | | } |
| | | /** 所有状态对应的动画图片 */ |
| | | @property (strong, nonatomic) NSMutableDictionary *stateImages; |
| | | /** 所有状态对应的动画时间 */ |
| | |
| | | } |
| | | |
| | | #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; |
| | | } |
| | | } |
| | | |
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 |
| | |
| | | self.loadingView = nil; |
| | | [self setNeedsLayout]; |
| | | } |
| | | #pragma makr - 重写父类的方法 |
| | | #pragma mark - 重写父类的方法 |
| | | - (void)prepare |
| | | { |
| | | [super prepare]; |
| | |
| | | { |
| | | [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 |
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 |
| | |
| | | #import "MJRefreshAutoFooter.h" |
| | | |
| | | @interface MJRefreshAutoStateFooter : MJRefreshAutoFooter |
| | | /** 文字距离圈圈、箭头的距离 */ |
| | | @property (assign, nonatomic) CGFloat labelLeftInset; |
| | | /** 显示刷新状态的label */ |
| | | @property (weak, nonatomic, readonly) UILabel *stateLabel; |
| | | |
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 |
| | |
| | | @interface MJRefreshAutoStateFooter() |
| | | { |
| | | /** 显示刷新状态的label */ |
| | | __weak UILabel *_stateLabel; |
| | | __unsafe_unretained UILabel *_stateLabel; |
| | | } |
| | | /** 所有状态对应的文字 */ |
| | | @property (strong, nonatomic) NSMutableDictionary *stateTitles; |
| | |
| | | - (UILabel *)stateLabel |
| | | { |
| | | if (!_stateLabel) { |
| | | [self addSubview:_stateLabel = [UILabel label]]; |
| | | [self addSubview:_stateLabel = [UILabel mj_label]]; |
| | | } |
| | | return _stateLabel; |
| | | } |
| | |
| | | { |
| | | [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; |
| | |
| | | { |
| | | [super placeSubviews]; |
| | | |
| | | if (self.stateLabel.constraints.count) return; |
| | | |
| | | // 状态标签 |
| | | self.stateLabel.frame = self.bounds; |
| | | } |
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 |
| | |
| | | #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; |
File was renamed from EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m |
| | |
| | | #import "MJRefreshBackGifFooter.h" |
| | | |
| | | @interface MJRefreshBackGifFooter() |
| | | @property (weak, nonatomic) UIImageView *gifView; |
| | | { |
| | | __unsafe_unretained UIImageView *_gifView; |
| | | } |
| | | /** 所有状态对应的动画图片 */ |
| | | @property (strong, nonatomic) NSMutableDictionary *stateImages; |
| | | /** 所有状态对应的动画时间 */ |
| | |
| | | } |
| | | |
| | | #pragma mark - 实现父类的方法 |
| | | - (void)prepare |
| | | { |
| | | [super prepare]; |
| | | |
| | | // 初始化间距 |
| | | self.labelLeftInset = 20; |
| | | } |
| | | |
| | | - (void)setPullingPercent:(CGFloat)pullingPercent |
| | | { |
| | | [super setPullingPercent:pullingPercent]; |
| | |
| | | { |
| | | [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; |
| | | } |
| | | } |
| | | |
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 |
| | |
| | | // |
| | | |
| | | #import "MJRefreshBackNormalFooter.h" |
| | | #import "NSBundle+MJRefresh.h" |
| | | |
| | | @interface MJRefreshBackNormalFooter() |
| | | { |
| | | __weak UIImageView *_arrowView; |
| | | __unsafe_unretained UIImageView *_arrowView; |
| | | } |
| | | @property (weak, nonatomic) UIActivityIndicatorView *loadingView; |
| | | @end |
| | |
| | | - (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; |
| | |
| | | self.loadingView = nil; |
| | | [self setNeedsLayout]; |
| | | } |
| | | #pragma makr - 重写父类的方法 |
| | | #pragma mark - 重写父类的方法 |
| | | - (void)prepare |
| | | { |
| | | [super prepare]; |
| | |
| | | { |
| | | [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 |
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 |
| | |
| | | #import "MJRefreshBackFooter.h" |
| | | |
| | | @interface MJRefreshBackStateFooter : MJRefreshBackFooter |
| | | /** 文字距离圈圈、箭头的距离 */ |
| | | @property (assign, nonatomic) CGFloat labelLeftInset; |
| | | /** 显示刷新状态的label */ |
| | | @property (weak, nonatomic, readonly) UILabel *stateLabel; |
| | | /** 设置state状态下的文字 */ |
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 |
| | |
| | | @interface MJRefreshBackStateFooter() |
| | | { |
| | | /** 显示刷新状态的label */ |
| | | __weak UILabel *_stateLabel; |
| | | __unsafe_unretained UILabel *_stateLabel; |
| | | } |
| | | /** 所有状态对应的文字 */ |
| | | @property (strong, nonatomic) NSMutableDictionary *stateTitles; |
| | |
| | | - (UILabel *)stateLabel |
| | | { |
| | | if (!_stateLabel) { |
| | | [self addSubview:_stateLabel = [UILabel label]]; |
| | | [self addSubview:_stateLabel = [UILabel mj_label]]; |
| | | } |
| | | return _stateLabel; |
| | | } |
| | |
| | | { |
| | | [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; |
| | | } |
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 |
| | |
| | | #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; |
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 |
| | |
| | | #import "MJRefreshGifHeader.h" |
| | | |
| | | @interface MJRefreshGifHeader() |
| | | @property (weak, nonatomic) UIImageView *gifView; |
| | | { |
| | | __unsafe_unretained UIImageView *_gifView; |
| | | } |
| | | /** 所有状态对应的动画图片 */ |
| | | @property (strong, nonatomic) NSMutableDictionary *stateImages; |
| | | /** 所有状态对应的动画时间 */ |
| | |
| | | } |
| | | |
| | | #pragma mark - 实现父类的方法 |
| | | - (void)prepare |
| | | { |
| | | [super prepare]; |
| | | |
| | | // 初始化间距 |
| | | self.labelLeftInset = 20; |
| | | } |
| | | |
| | | - (void)setPullingPercent:(CGFloat)pullingPercent |
| | | { |
| | | [super setPullingPercent:pullingPercent]; |
| | |
| | | { |
| | | [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; |
| | | } |
| | | } |
| | | |
| | |
| | | self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; |
| | | [self.gifView startAnimating]; |
| | | } |
| | | } else if (state == MJRefreshStateIdle) { |
| | | [self.gifView stopAnimating]; |
| | | } |
| | | } |
| | | @end |
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 |
| | |
| | | // |
| | | |
| | | #import "MJRefreshNormalHeader.h" |
| | | #import "NSBundle+MJRefresh.h" |
| | | |
| | | @interface MJRefreshNormalHeader() |
| | | { |
| | | __weak UIImageView *_arrowView; |
| | | __unsafe_unretained UIImageView *_arrowView; |
| | | } |
| | | @property (weak, nonatomic) UIActivityIndicatorView *loadingView; |
| | | @end |
| | |
| | | - (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; |
| | |
| | | [self setNeedsLayout]; |
| | | } |
| | | |
| | | #pragma makr - 重写父类的方法 |
| | | #pragma mark - 重写父类的方法 |
| | | - (void)prepare |
| | | { |
| | | [super prepare]; |
| | |
| | | { |
| | | [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 |
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 |
| | |
| | | @property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel; |
| | | |
| | | #pragma mark - 状态相关 |
| | | /** 文字距离圈圈、箭头的距离 */ |
| | | @property (assign, nonatomic) CGFloat labelLeftInset; |
| | | /** 显示刷新状态的label */ |
| | | @property (weak, nonatomic, readonly) UILabel *stateLabel; |
| | | /** 设置state状态下的文字 */ |
New file |
| | |
| | | // |
| | | // 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 |
New file |
| | |
| | | "MJRefreshHeaderIdleText" = "下拉可以刷新"; |
| | | "MJRefreshHeaderPullingText" = "鬆開立即刷新"; |
| | | "MJRefreshHeaderRefreshingText" = "正在刷新數據中..."; |
| | | |
| | | "MJRefreshAutoFooterIdleText" = "點擊或上拉加載更多"; |
| | | "MJRefreshAutoFooterRefreshingText" = "正在加載更多的數據..."; |
| | | "MJRefreshAutoFooterNoMoreDataText" = "已經全部加載完畢"; |
| | | |
| | | "MJRefreshBackFooterIdleText" = "上拉可以加載更多"; |
| | | "MJRefreshBackFooterPullingText" = "鬆開立即加載更多"; |
| | | "MJRefreshBackFooterRefreshingText" = "正在加載更多的數據..."; |
| | | "MJRefreshBackFooterNoMoreDataText" = "已經全部加載完畢"; |
| | | |
| | | "MJRefreshHeaderLastTimeText" = "最後更新:"; |
| | | "MJRefreshHeaderDateTodayText" = "今天"; |
| | | "MJRefreshHeaderNoneLastDateText" = "無記錄"; |
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 |
| | |
| | | #import <UIKit/UIKit.h> |
| | | #import <objc/message.h> |
| | | |
| | | // 弱引用 |
| | | #define MJWeakSelf __weak typeof(self) weakSelf = self; |
| | | |
| | | // 日志输出 |
| | | #ifdef DEBUG |
| | | #define MJRefreshLog(...) NSLog(__VA_ARGS__) |
| | |
| | | // 字体大小 |
| | | #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; |
| | |
| | | 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; \ |
New file |
| | |
| | | // 代码地址: 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"; |
New file |
| | |
| | | // |
| | | // 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 |
New file |
| | |
| | | // |
| | | // 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 |
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 |
| | |
| | | #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; |
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 |
| | |
| | | #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 |
| | |
| | | return self.contentSize.height; |
| | | } |
| | | @end |
| | | #pragma clang diagnostic pop |
New file |
| | |
| | | // 代码地址: 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 |
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 |
| | |
| | | |
| | | #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]]) { |
| | |
| | | } |
| | | |
| | | 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 |
| | | |
New file |
| | |
| | |  |
| | | ## 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 |
| | |  |
| | | - `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]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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 |
| | | ``` |
| | |  |
| | | |
| | | ## <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)]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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)]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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; |
| | | ``` |
| | |  |
| | | |
| | | ## <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 |
| | | ``` |
| | |  |
| | | |
| | | ## <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 |
| | | ``` |
| | |  |
| | | |
| | | ## <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 |
| | | }]; |
| | | ``` |
| | |  |
| | | |
| | | ## <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 |
| | | }]; |
| | | ``` |
| | |  |
| | | |
| | | ## 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”) |
| | |  |
| | | * StepO2 |
| | |  |
| | | * StepO3 |
| | |  |
| | | * StepO4 |
| | |  |
old mode 100644
new mode 100755
old mode 100644
new mode 100755
| | |
| | | |
| | | #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) { |
| | |
| | | } |
| | | } |
| | | |
| | | - (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; |
old mode 100644
new mode 100755
old mode 100644
new mode 100755
| | |
| | | /** |
| | | * 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; |
| | |
| | | /** |
| | | * 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 |
| | |
| | | - (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; |
| | |
| | | /** |
| | | * 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; |
| | |
| | | |
| | | // 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 |
| | | */ |
old mode 100644
new mode 100755
| | |
| | | |
| | | #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; |
| | |
| | | - (MASConstraint * (^)(MASEdgeInsets))insets { |
| | | return ^id(MASEdgeInsets insets){ |
| | | self.insets = insets; |
| | | return self; |
| | | }; |
| | | } |
| | | |
| | | - (MASConstraint * (^)(CGFloat))inset { |
| | | return ^id(CGFloat inset){ |
| | | self.inset = inset; |
| | | return self; |
| | | }; |
| | | } |
| | |
| | | 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]; |
| | |
| | | |
| | | - (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(); } |
| | | |
old mode 100644
new mode 100755
| | |
| | | // |
| | | // MASConstraintBuilder.h |
| | | // MASConstraintMaker.h |
| | | // Masonry |
| | | // |
| | | // Created by Jonas Budelmann on 20/07/13. |
| | |
| | | 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, |
| | |
| | | @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; |
| | |
| | | /** |
| | | * 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 |
| | | */ |
old mode 100644
new mode 100755
| | |
| | | // |
| | | // MASConstraintBuilder.m |
| | | // MASConstraintMaker.m |
| | | // Masonry |
| | | // |
| | | // Created by Jonas Budelmann on 20/07/13. |
| | |
| | | __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 |
| | |
| | | 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]; |
| | |
| | | }; |
| | | } |
| | | |
| | | #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]; |
old mode 100644
new mode 100755
old mode 100644
new mode 100755
old mode 100644
new mode 100755
| | |
| | | |
| | | #import <Foundation/Foundation.h> |
| | | |
| | | #if TARGET_OS_IPHONE |
| | | |
| | | |
| | | #if TARGET_OS_IPHONE || TARGET_OS_TV |
| | | |
| | | #import <UIKit/UIKit.h> |
| | | #define MAS_VIEW UIView |
| | |
| | | * |
| | | * 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]; \ |
| | | } \ |
| | | } |
| | | |
| | | /** |
old mode 100644
new mode 100755
| | |
| | | // |
| | | // MASAttribute.h |
| | | // MASViewAttribute.h |
| | | // Masonry |
| | | // |
| | | // Created by Jonas Budelmann on 21/07/13. |
old mode 100644
new mode 100755
| | |
| | | // |
| | | // MASAttribute.m |
| | | // MASViewAttribute.m |
| | | // Masonry |
| | | // |
| | | // Created by Jonas Budelmann on 21/07/13. |
old mode 100644
new mode 100755
| | |
| | | // |
| | | // MASConstraint.h |
| | | // MASViewConstraint.h |
| | | // Masonry |
| | | // |
| | | // Created by Jonas Budelmann on 20/07/13. |
old mode 100644
new mode 100755
| | |
| | | // |
| | | // MASConstraint.m |
| | | // MASViewConstraint.m |
| | | // Masonry |
| | | // |
| | | // Created by Jonas Budelmann on 20/07/13. |
| | |
| | | - (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 { |
| | |
| | | NSMutableArray *children = NSMutableArray.new; |
| | | for (id attr in attribute) { |
| | | MASViewConstraint *viewConstraint = [self copy]; |
| | | viewConstraint.layoutRelation = relation; |
| | | viewConstraint.secondViewAttribute = attr; |
| | | [children addObject:viewConstraint]; |
| | | } |
| | |
| | | |
| | | #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; |
| | |
| | | } |
| | | } |
| | | |
| | | - (void)setInset:(CGFloat)inset { |
| | | [self setInsets:(MASEdgeInsets){.top = inset, .left = inset, .bottom = inset, .right = inset}]; |
| | | } |
| | | |
| | | - (void)setOffset:(CGFloat)offset { |
| | | self.layoutConstant = offset; |
| | | } |
| | |
| | | #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; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | - (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; |
old mode 100644
new mode 100755
old mode 100644
new mode 100755
| | |
| | | * |
| | | * @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. |
| | |
| | | * |
| | | * @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. |
| | |
| | | * |
| | | * @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 |
old mode 100644
new mode 100755
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | 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; |
| | |
| | | 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; |
old mode 100644
new mode 100755
old mode 100644
new mode 100755
old mode 100644
new mode 100755
| | |
| | | @(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", |
| | |
| | | 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", |
| | |
| | | |
| | | [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) { |
| | |
| | | } |
| | | |
| | | 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:@">"]; |
old mode 100644
new mode 100755
| | |
| | | @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; |
| | |
| | | @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 |
| | | |
| | |
| | | * |
| | | * @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. |
| | |
| | | * |
| | | * @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. |
| | |
| | | * |
| | | * @return Array of created/updated MASConstraints |
| | | */ |
| | | - (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block; |
| | | - (NSArray *)mas_remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block; |
| | | |
| | | @end |
old mode 100644
new mode 100755
| | |
| | | }; |
| | | } |
| | | |
| | | #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]; |
| | |
| | | |
| | | #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 { |
old mode 100644
new mode 100755
| | |
| | | @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; |
| | |
| | | @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 |
| | | |
| | |
| | | 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); |
| | |
| | | |
| | | #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]; |
| | | } |
| | | |
old mode 100644
new mode 100755
old mode 100644
new mode 100755
| | |
| | | 传入国内版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 |
| | |
| | | #import "EZDeviceTableViewController.h" |
| | | #import "EZHCNetDeviceSDK.h" |
| | | |
| | | |
| | | #define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0]) |
| | | #define LanguageIsChinese ([CURR_LANG rangeOfString:@"zh-Hans"].location != NSNotFound) |
| | | |
| | | |
| | | @implementation EZSDK |
| | | |
| | | /** |
| | |
| | | { |
| | | static BOOL isHavelibInit=NO; |
| | | if (!isHavelibInit) { |
| | | // isHavelibInit=YES; |
| | | NSLog(@"第一次初始化萤石库"); |
| | | // isHavelibInit=YES; |
| | | // NSLog(@"第一次初始化萤石库"); |
| | | if (!LanguageIsChinese) { |
| | | //海外版 |
| | | isHavelibInit = [EZGlobalSDK initLibWithAppKey:globalAppKey]; |
| | |
| | | } |
| | | 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 |
| | | //{ |
| | |
| | | // 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 |
| | | //{ |
| | |
| | | // 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 |