├── example ├── .watchmanconfig ├── .gitattributes ├── app.json ├── ios │ ├── Pods │ │ ├── Headers │ │ │ ├── Public │ │ │ │ └── MJRefresh │ │ │ │ │ ├── MJRefresh.h │ │ │ │ │ ├── MJRefreshConst.h │ │ │ │ │ ├── MJRefreshFooter.h │ │ │ │ │ ├── MJRefreshHeader.h │ │ │ │ │ ├── NSBundle+MJRefresh.h │ │ │ │ │ ├── UIView+MJExtension.h │ │ │ │ │ ├── MJRefreshAutoFooter.h │ │ │ │ │ ├── MJRefreshBackFooter.h │ │ │ │ │ ├── MJRefreshComponent.h │ │ │ │ │ ├── UIScrollView+MJExtension.h │ │ │ │ │ ├── UIScrollView+MJRefresh.h │ │ │ │ │ ├── MJRefreshGifHeader.h │ │ │ │ │ ├── MJRefreshNormalHeader.h │ │ │ │ │ ├── MJRefreshStateHeader.h │ │ │ │ │ ├── MJRefreshAutoGifFooter.h │ │ │ │ │ ├── MJRefreshBackGifFooter.h │ │ │ │ │ ├── MJRefreshAutoStateFooter.h │ │ │ │ │ ├── MJRefreshBackStateFooter.h │ │ │ │ │ ├── MJRefreshAutoNormalFooter.h │ │ │ │ │ └── MJRefreshBackNormalFooter.h │ │ │ └── Private │ │ │ │ └── MJRefresh │ │ │ │ ├── MJRefresh.h │ │ │ │ ├── MJRefreshConst.h │ │ │ │ ├── MJRefreshFooter.h │ │ │ │ ├── MJRefreshHeader.h │ │ │ │ ├── NSBundle+MJRefresh.h │ │ │ │ ├── UIView+MJExtension.h │ │ │ │ ├── MJRefreshComponent.h │ │ │ │ ├── MJRefreshAutoFooter.h │ │ │ │ ├── MJRefreshBackFooter.h │ │ │ │ ├── UIScrollView+MJRefresh.h │ │ │ │ ├── MJRefreshGifHeader.h │ │ │ │ ├── UIScrollView+MJExtension.h │ │ │ │ ├── MJRefreshNormalHeader.h │ │ │ │ ├── MJRefreshStateHeader.h │ │ │ │ ├── MJRefreshAutoGifFooter.h │ │ │ │ ├── MJRefreshAutoStateFooter.h │ │ │ │ ├── MJRefreshBackGifFooter.h │ │ │ │ ├── MJRefreshBackStateFooter.h │ │ │ │ ├── MJRefreshAutoNormalFooter.h │ │ │ │ └── MJRefreshBackNormalFooter.h │ │ ├── MJRefresh │ │ │ ├── MJRefresh │ │ │ │ ├── MJRefresh.bundle │ │ │ │ │ ├── arrow@2x.png │ │ │ │ │ ├── en.lproj │ │ │ │ │ │ └── Localizable.strings │ │ │ │ │ ├── zh-Hans.lproj │ │ │ │ │ │ └── Localizable.strings │ │ │ │ │ └── zh-Hant.lproj │ │ │ │ │ │ └── Localizable.strings │ │ │ │ ├── Base │ │ │ │ │ ├── MJRefreshBackFooter.h │ │ │ │ │ ├── MJRefreshAutoFooter.h │ │ │ │ │ ├── MJRefreshHeader.h │ │ │ │ │ ├── MJRefreshFooter.h │ │ │ │ │ └── MJRefreshFooter.m │ │ │ │ ├── NSBundle+MJRefresh.h │ │ │ │ ├── MJRefresh.h │ │ │ │ ├── Custom │ │ │ │ │ ├── Header │ │ │ │ │ │ ├── MJRefreshGifHeader.h │ │ │ │ │ │ ├── MJRefreshNormalHeader.h │ │ │ │ │ │ ├── MJRefreshStateHeader.h │ │ │ │ │ │ └── MJRefreshGifHeader.m │ │ │ │ │ └── Footer │ │ │ │ │ │ ├── Auto │ │ │ │ │ │ ├── MJRefreshAutoNormalFooter.h │ │ │ │ │ │ ├── MJRefreshAutoGifFooter.h │ │ │ │ │ │ ├── MJRefreshAutoStateFooter.h │ │ │ │ │ │ ├── MJRefreshAutoNormalFooter.m │ │ │ │ │ │ ├── MJRefreshAutoStateFooter.m │ │ │ │ │ │ └── MJRefreshAutoGifFooter.m │ │ │ │ │ │ └── Back │ │ │ │ │ │ ├── MJRefreshBackGifFooter.h │ │ │ │ │ │ ├── MJRefreshBackNormalFooter.h │ │ │ │ │ │ ├── MJRefreshBackStateFooter.h │ │ │ │ │ │ ├── MJRefreshBackStateFooter.m │ │ │ │ │ │ └── MJRefreshBackGifFooter.m │ │ │ │ ├── UIView+MJExtension.h │ │ │ │ ├── UIScrollView+MJExtension.h │ │ │ │ ├── UIScrollView+MJRefresh.h │ │ │ │ ├── UIView+MJExtension.m │ │ │ │ ├── MJRefreshConst.m │ │ │ │ ├── NSBundle+MJRefresh.m │ │ │ │ ├── MJRefreshConst.h │ │ │ │ ├── UIScrollView+MJRefresh.m │ │ │ │ └── UIScrollView+MJExtension.m │ │ │ └── LICENSE │ │ ├── Target Support Files │ │ │ ├── MJRefresh │ │ │ │ ├── MJRefresh-dummy.m │ │ │ │ └── MJRefresh-prefix.pch │ │ │ └── Pods-example │ │ │ │ ├── Pods-example-dummy.m │ │ │ │ ├── Pods-example.debug.xcconfig │ │ │ │ └── Pods-example.release.xcconfig │ │ └── Local Podspecs │ │ │ ├── RNGestureHandler.podspec.json │ │ │ ├── RNReanimated.podspec.json │ │ │ └── RNScreens.podspec.json │ ├── example │ │ ├── Images.xcassets │ │ │ ├── Contents.json │ │ │ ├── DianPing │ │ │ │ ├── Contents.json │ │ │ │ ├── dropdown_anim__0001.imageset │ │ │ │ │ ├── dropdown_anim__0001@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__0002.imageset │ │ │ │ │ ├── dropdown_anim__0002@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__0003.imageset │ │ │ │ │ ├── dropdown_anim__0003@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__0004.imageset │ │ │ │ │ ├── dropdown_anim__0004@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__0005.imageset │ │ │ │ │ ├── dropdown_anim__0005@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__0006.imageset │ │ │ │ │ ├── dropdown_anim__0006@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__0007.imageset │ │ │ │ │ ├── dropdown_anim__0007@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__0008.imageset │ │ │ │ │ ├── dropdown_anim__0008@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__0009.imageset │ │ │ │ │ ├── dropdown_anim__0009@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_loading_01.imageset │ │ │ │ │ ├── dropdown_loading_01@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_loading_02.imageset │ │ │ │ │ ├── dropdown_loading_02@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_loading_03.imageset │ │ │ │ │ ├── dropdown_loading_03@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00010.imageset │ │ │ │ │ ├── dropdown_anim__00010@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00011.imageset │ │ │ │ │ ├── dropdown_anim__00011@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00012.imageset │ │ │ │ │ ├── dropdown_anim__00012@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00013.imageset │ │ │ │ │ ├── dropdown_anim__00013@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00014.imageset │ │ │ │ │ ├── dropdown_anim__00014@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00015.imageset │ │ │ │ │ ├── dropdown_anim__00015@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00016.imageset │ │ │ │ │ ├── dropdown_anim__00016@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00017.imageset │ │ │ │ │ ├── dropdown_anim__00017@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00018.imageset │ │ │ │ │ ├── dropdown_anim__00018@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00019.imageset │ │ │ │ │ ├── dropdown_anim__00019@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00020.imageset │ │ │ │ │ ├── dropdown_anim__00020@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00021.imageset │ │ │ │ │ ├── dropdown_anim__00021@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00022.imageset │ │ │ │ │ ├── dropdown_anim__00022@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00023.imageset │ │ │ │ │ ├── dropdown_anim__00023@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00024.imageset │ │ │ │ │ ├── dropdown_anim__00024@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00025.imageset │ │ │ │ │ ├── dropdown_anim__00025@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00026.imageset │ │ │ │ │ ├── dropdown_anim__00026@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00027.imageset │ │ │ │ │ ├── dropdown_anim__00027@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00028.imageset │ │ │ │ │ ├── dropdown_anim__00028@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00029.imageset │ │ │ │ │ ├── dropdown_anim__00029@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00030.imageset │ │ │ │ │ ├── dropdown_anim__00030@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00031.imageset │ │ │ │ │ ├── dropdown_anim__00031@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00032.imageset │ │ │ │ │ ├── dropdown_anim__00032@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00033.imageset │ │ │ │ │ ├── dropdown_anim__00033@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00034.imageset │ │ │ │ │ ├── dropdown_anim__00034@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00035.imageset │ │ │ │ │ ├── dropdown_anim__00035@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00036.imageset │ │ │ │ │ ├── dropdown_anim__00036@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00037.imageset │ │ │ │ │ ├── dropdown_anim__00037@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00038.imageset │ │ │ │ │ ├── dropdown_anim__00038@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00039.imageset │ │ │ │ │ ├── dropdown_anim__00039@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00040.imageset │ │ │ │ │ ├── dropdown_anim__00040@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00041.imageset │ │ │ │ │ ├── dropdown_anim__00041@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00042.imageset │ │ │ │ │ ├── dropdown_anim__00042@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00043.imageset │ │ │ │ │ ├── dropdown_anim__00043@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00044.imageset │ │ │ │ │ ├── dropdown_anim__00044@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00045.imageset │ │ │ │ │ ├── dropdown_anim__00045@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00046.imageset │ │ │ │ │ ├── dropdown_anim__00046@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00047.imageset │ │ │ │ │ ├── dropdown_anim__00047@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00048.imageset │ │ │ │ │ ├── dropdown_anim__00048@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00049.imageset │ │ │ │ │ ├── dropdown_anim__00049@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00050.imageset │ │ │ │ │ ├── dropdown_anim__00050@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00051.imageset │ │ │ │ │ ├── dropdown_anim__00051@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00052.imageset │ │ │ │ │ ├── dropdown_anim__00052@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00053.imageset │ │ │ │ │ ├── dropdown_anim__00053@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00054.imageset │ │ │ │ │ ├── dropdown_anim__00054@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00055.imageset │ │ │ │ │ ├── dropdown_anim__00055@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00056.imageset │ │ │ │ │ ├── dropdown_anim__00056@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00057.imageset │ │ │ │ │ ├── dropdown_anim__00057@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00058.imageset │ │ │ │ │ ├── dropdown_anim__00058@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ ├── dropdown_anim__00059.imageset │ │ │ │ │ ├── dropdown_anim__00059@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ └── dropdown_anim__00060.imageset │ │ │ │ │ ├── dropdown_anim__00060@2x.png │ │ │ │ │ └── Contents.json │ │ │ ├── yuanquan.imageset │ │ │ │ ├── yuanquan@2x.png │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ ├── AppDelegate.h │ │ ├── main.m │ │ ├── AppDelegate.m │ │ ├── Info.plist │ │ └── Base.lproj │ │ │ └── LaunchScreen.xib │ ├── example.xcodeproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── example.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── exampleTests │ │ ├── Info.plist │ │ └── exampleTests.m │ ├── example-tvOSTests │ │ └── Info.plist │ ├── example-tvOS │ │ └── Info.plist │ └── Podfile ├── .eslintrc.js ├── babel.config.js ├── android │ ├── app │ │ ├── src │ │ │ ├── main │ │ │ │ ├── res │ │ │ │ │ ├── values │ │ │ │ │ │ ├── strings.xml │ │ │ │ │ │ └── styles.xml │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ │ └── mipmap-xxxhdpi │ │ │ │ │ │ ├── ic_launcher.png │ │ │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── java │ │ │ │ │ └── com │ │ │ │ │ │ └── example │ │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ │ └── MainApplication.java │ │ │ │ └── AndroidManifest.xml │ │ │ └── debug │ │ │ │ └── AndroidManifest.xml │ │ ├── debug.keystore │ │ ├── proguard-rules.pro │ │ ├── build_defs.bzl │ │ └── BUCK │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── settings.gradle │ ├── gradle.properties │ ├── build.gradle │ └── gradlew.bat ├── src │ ├── images │ │ └── loading1.gif │ ├── router │ │ └── mainStackRouter.js │ └── screen │ │ ├── webViewScreen.js │ │ ├── listDemoScreen.js │ │ └── tipsScreen.js ├── shotscreen │ ├── footer1-min.gif │ ├── footer2-min.gif │ ├── footer3-min.gif │ ├── footer4-min.gif │ ├── normal1-min.gif │ ├── normal2-min.gif │ ├── normal3-min.gif │ ├── normal4-min.gif │ └── webview-min.gif ├── .buckconfig ├── .prettierrc.js ├── index.js ├── __tests__ │ └── App-test.js ├── metro.config.js ├── .gitignore ├── package.json ├── .flowconfig └── App.js ├── .npmignore ├── yarn.lock ├── ios ├── RNCWebView+MJRefresh │ ├── RNCWebViewManager+MJRefresh.m │ ├── RNCWebViewManager+MJRefresh.h │ └── RNCWebView+MJRfresh.h ├── RCTScrollView+MJRefresh │ ├── RCTScrollViewManager+MJRefresh.h │ ├── RCTScrollViewManager+MJRefresh.m │ └── RCTScrollView+MJRefresh.h └── MJRefreshExtension │ └── XYRefreshGifHeader.h ├── package.json ├── LICENSE └── .gitignore /example/.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | example/ -------------------------------------------------------------------------------- /example/.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | -------------------------------------------------------------------------------- /example/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "displayName": "example" 4 | } -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefresh.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/MJRefresh.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefresh.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/MJRefresh.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshConst.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/MJRefreshConst.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshConst.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/MJRefreshConst.h -------------------------------------------------------------------------------- /example/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: '@react-native-community', 4 | }; 5 | -------------------------------------------------------------------------------- /example/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:metro-react-native-babel-preset'], 3 | }; 4 | -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshHeader.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshHeader.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/NSBundle+MJRefresh.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/NSBundle+MJRefresh.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/UIView+MJExtension.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/UIView+MJExtension.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshHeader.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshHeader.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/NSBundle+MJRefresh.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/NSBundle+MJRefresh.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/UIView+MJExtension.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/UIView+MJExtension.h -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshComponent.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshComponent.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshAutoFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshBackFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshComponent.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshComponent.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshAutoFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshBackFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/UIScrollView+MJRefresh.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/UIScrollView+MJRefresh.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/UIScrollView+MJExtension.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/UIScrollView+MJExtension.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/UIScrollView+MJRefresh.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/UIScrollView+MJRefresh.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshGifHeader.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/UIScrollView+MJExtension.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/UIScrollView+MJExtension.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshGifHeader.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h -------------------------------------------------------------------------------- /example/android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | example 3 | 4 | -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshNormalHeader.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshStateHeader.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshNormalHeader.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshStateHeader.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshAutoGifFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshBackGifFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /example/src/images/loading1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/src/images/loading1.gif -------------------------------------------------------------------------------- /example/android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/android/app/debug.keystore -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshAutoGifFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshAutoStateFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshBackGifFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshBackStateFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshAutoStateFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshBackStateFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /example/shotscreen/footer1-min.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/shotscreen/footer1-min.gif -------------------------------------------------------------------------------- /example/shotscreen/footer2-min.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/shotscreen/footer2-min.gif -------------------------------------------------------------------------------- /example/shotscreen/footer3-min.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/shotscreen/footer3-min.gif -------------------------------------------------------------------------------- /example/shotscreen/footer4-min.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/shotscreen/footer4-min.gif -------------------------------------------------------------------------------- /example/shotscreen/normal1-min.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/shotscreen/normal1-min.gif -------------------------------------------------------------------------------- /example/shotscreen/normal2-min.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/shotscreen/normal2-min.gif -------------------------------------------------------------------------------- /example/shotscreen/normal3-min.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/shotscreen/normal3-min.gif -------------------------------------------------------------------------------- /example/shotscreen/normal4-min.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/shotscreen/normal4-min.gif -------------------------------------------------------------------------------- /example/shotscreen/webview-min.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/shotscreen/webview-min.gif -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshAutoNormalFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Private/MJRefresh/MJRefreshBackNormalFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshAutoNormalFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h -------------------------------------------------------------------------------- /example/ios/Pods/Headers/Public/MJRefresh/MJRefreshBackNormalFooter.h: -------------------------------------------------------------------------------- 1 | ../../../MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h -------------------------------------------------------------------------------- /example/.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /example/.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | bracketSpacing: false, 3 | jsxBracketSameLine: true, 4 | singleQuote: true, 5 | trailingComma: 'all', 6 | }; 7 | -------------------------------------------------------------------------------- /example/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png -------------------------------------------------------------------------------- /example/ios/Pods/Target Support Files/MJRefresh/MJRefresh-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_MJRefresh : NSObject 3 | @end 4 | @implementation PodsDummy_MJRefresh 5 | @end 6 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/yuanquan.imageset/yuanquan@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/yuanquan.imageset/yuanquan@2x.png -------------------------------------------------------------------------------- /example/ios/Pods/Target Support Files/Pods-example/Pods-example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_example 5 | @end 6 | -------------------------------------------------------------------------------- /example/ios/example.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings -------------------------------------------------------------------------------- /example/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import {AppRegistry} from 'react-native'; 6 | import App from './App'; 7 | import {name as appName} from './app.json'; 8 | 9 | AppRegistry.registerComponent(appName, () => App); 10 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings -------------------------------------------------------------------------------- /example/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0001.imageset/dropdown_anim__0001@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__0001.imageset/dropdown_anim__0001@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0002.imageset/dropdown_anim__0002@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__0002.imageset/dropdown_anim__0002@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0003.imageset/dropdown_anim__0003@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__0003.imageset/dropdown_anim__0003@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0004.imageset/dropdown_anim__0004@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__0004.imageset/dropdown_anim__0004@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0005.imageset/dropdown_anim__0005@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__0005.imageset/dropdown_anim__0005@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0006.imageset/dropdown_anim__0006@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__0006.imageset/dropdown_anim__0006@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0007.imageset/dropdown_anim__0007@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__0007.imageset/dropdown_anim__0007@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0008.imageset/dropdown_anim__0008@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__0008.imageset/dropdown_anim__0008@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0009.imageset/dropdown_anim__0009@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__0009.imageset/dropdown_anim__0009@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_loading_01.imageset/dropdown_loading_01@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_loading_01.imageset/dropdown_loading_01@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_loading_02.imageset/dropdown_loading_02@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_loading_02.imageset/dropdown_loading_02@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_loading_03.imageset/dropdown_loading_03@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_loading_03.imageset/dropdown_loading_03@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00010.imageset/dropdown_anim__00010@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00010.imageset/dropdown_anim__00010@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00011.imageset/dropdown_anim__00011@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00011.imageset/dropdown_anim__00011@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00012.imageset/dropdown_anim__00012@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00012.imageset/dropdown_anim__00012@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00013.imageset/dropdown_anim__00013@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00013.imageset/dropdown_anim__00013@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00014.imageset/dropdown_anim__00014@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00014.imageset/dropdown_anim__00014@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00015.imageset/dropdown_anim__00015@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00015.imageset/dropdown_anim__00015@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00016.imageset/dropdown_anim__00016@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00016.imageset/dropdown_anim__00016@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00017.imageset/dropdown_anim__00017@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00017.imageset/dropdown_anim__00017@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00018.imageset/dropdown_anim__00018@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00018.imageset/dropdown_anim__00018@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00019.imageset/dropdown_anim__00019@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00019.imageset/dropdown_anim__00019@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00020.imageset/dropdown_anim__00020@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00020.imageset/dropdown_anim__00020@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00021.imageset/dropdown_anim__00021@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00021.imageset/dropdown_anim__00021@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00022.imageset/dropdown_anim__00022@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00022.imageset/dropdown_anim__00022@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00023.imageset/dropdown_anim__00023@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00023.imageset/dropdown_anim__00023@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00024.imageset/dropdown_anim__00024@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00024.imageset/dropdown_anim__00024@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00025.imageset/dropdown_anim__00025@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00025.imageset/dropdown_anim__00025@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00026.imageset/dropdown_anim__00026@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00026.imageset/dropdown_anim__00026@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00027.imageset/dropdown_anim__00027@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00027.imageset/dropdown_anim__00027@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00028.imageset/dropdown_anim__00028@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00028.imageset/dropdown_anim__00028@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00029.imageset/dropdown_anim__00029@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00029.imageset/dropdown_anim__00029@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00030.imageset/dropdown_anim__00030@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00030.imageset/dropdown_anim__00030@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00031.imageset/dropdown_anim__00031@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00031.imageset/dropdown_anim__00031@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00032.imageset/dropdown_anim__00032@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00032.imageset/dropdown_anim__00032@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00033.imageset/dropdown_anim__00033@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00033.imageset/dropdown_anim__00033@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00034.imageset/dropdown_anim__00034@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00034.imageset/dropdown_anim__00034@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00035.imageset/dropdown_anim__00035@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00035.imageset/dropdown_anim__00035@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00036.imageset/dropdown_anim__00036@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00036.imageset/dropdown_anim__00036@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00037.imageset/dropdown_anim__00037@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00037.imageset/dropdown_anim__00037@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00038.imageset/dropdown_anim__00038@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00038.imageset/dropdown_anim__00038@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00039.imageset/dropdown_anim__00039@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00039.imageset/dropdown_anim__00039@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00040.imageset/dropdown_anim__00040@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00040.imageset/dropdown_anim__00040@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00041.imageset/dropdown_anim__00041@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00041.imageset/dropdown_anim__00041@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00042.imageset/dropdown_anim__00042@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00042.imageset/dropdown_anim__00042@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00043.imageset/dropdown_anim__00043@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00043.imageset/dropdown_anim__00043@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00044.imageset/dropdown_anim__00044@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00044.imageset/dropdown_anim__00044@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00045.imageset/dropdown_anim__00045@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00045.imageset/dropdown_anim__00045@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00046.imageset/dropdown_anim__00046@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00046.imageset/dropdown_anim__00046@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00047.imageset/dropdown_anim__00047@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00047.imageset/dropdown_anim__00047@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00048.imageset/dropdown_anim__00048@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00048.imageset/dropdown_anim__00048@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00049.imageset/dropdown_anim__00049@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00049.imageset/dropdown_anim__00049@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00050.imageset/dropdown_anim__00050@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00050.imageset/dropdown_anim__00050@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00051.imageset/dropdown_anim__00051@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00051.imageset/dropdown_anim__00051@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00052.imageset/dropdown_anim__00052@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00052.imageset/dropdown_anim__00052@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00053.imageset/dropdown_anim__00053@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00053.imageset/dropdown_anim__00053@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00054.imageset/dropdown_anim__00054@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00054.imageset/dropdown_anim__00054@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00055.imageset/dropdown_anim__00055@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00055.imageset/dropdown_anim__00055@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00056.imageset/dropdown_anim__00056@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00056.imageset/dropdown_anim__00056@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00057.imageset/dropdown_anim__00057@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00057.imageset/dropdown_anim__00057@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00058.imageset/dropdown_anim__00058@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00058.imageset/dropdown_anim__00058@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00059.imageset/dropdown_anim__00059@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00059.imageset/dropdown_anim__00059@2x.png -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00060.imageset/dropdown_anim__00060@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openUmbrella/react-native-mjrefresh-ios/HEAD/example/ios/example/Images.xcassets/DianPing/dropdown_anim__00060.imageset/dropdown_anim__00060@2x.png -------------------------------------------------------------------------------- /example/ios/Pods/Target Support Files/MJRefresh/MJRefresh-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /example/ios/example.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /example/ios/example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/__tests__/App-test.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import 'react-native'; 6 | import React from 'react'; 7 | import App from '../App'; 8 | 9 | // Note: test renderer must be required after react-native. 10 | import renderer from 'react-test-renderer'; 11 | 12 | it('renders correctly', () => { 13 | renderer.create(); 14 | }); 15 | -------------------------------------------------------------------------------- /example/android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'example' 2 | include ':react-native-webview' 3 | project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android') 4 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) 5 | include ':app' 6 | -------------------------------------------------------------------------------- /example/metro.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Metro configuration for React Native 3 | * https://github.com/facebook/react-native 4 | * 5 | * @format 6 | */ 7 | 8 | module.exports = { 9 | transformer: { 10 | getTransformOptions: async () => ({ 11 | transform: { 12 | experimentalImportSupport: false, 13 | inlineRequires: false, 14 | }, 15 | }), 16 | }, 17 | }; 18 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshBackFooter : MJRefreshFooter 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /example/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/yuanquan.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "yuanquan@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/android/app/src/main/java/com/example/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example; 2 | 3 | import com.facebook.react.ReactActivity; 4 | 5 | public class MainActivity extends ReactActivity { 6 | 7 | /** 8 | * Returns the name of the main component registered from JavaScript. This is used to schedule 9 | * rendering of the component. 10 | */ 11 | @Override 12 | protected String getMainComponentName() { 13 | return "example"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /example/ios/example/AppDelegate.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | #import 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (nonatomic, strong) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /example/ios/example/main.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | #import 9 | 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0001.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__0001@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0002.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__0002@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0003.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__0003@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0004.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__0004@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0005.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__0005@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0006.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__0006@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0007.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__0007@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0008.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__0008@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__0009.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__0009@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_loading_01.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_loading_01@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_loading_02.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_loading_02@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_loading_03.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_loading_03@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00010.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00010@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00011.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00011@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00012.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00012@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00013.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00013@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00014.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00014@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00015.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00015@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00016.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00016@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00017.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00017@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00018.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00018@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00019.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00019@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00020.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00020@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00021.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00021@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00022.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00022@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00023.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00023@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00024.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00024@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00025.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00025@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00026.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00026@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00027.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00027@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00028.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00028@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00029.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00029@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00030.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00030@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00031.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00031@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00032.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00032@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00033.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00033@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00034.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00034@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00035.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00035@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00036.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00036@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00037.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00037@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00038.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00038@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00039.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00039@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00040.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00040@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00041.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00041@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00042.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00042@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00043.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00043@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00044.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00044@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00045.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00045@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00046.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00046@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00047.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00047@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00048.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00048@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00049.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00049@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00050.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00050@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00051.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00051@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00052.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00052@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00053.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00053@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00054.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00054@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00055.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00055@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00056.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00056@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00057.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00057@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00058.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00058@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00059.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00059@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/DianPing/dropdown_anim__00060.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dropdown_anim__00060@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /example/android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/NSBundle+MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSBundle+MJRefresh.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 16/6/13. 6 | // Copyright © 2016年 小码哥. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSBundle (MJRefresh) 14 | + (instancetype)mj_refreshBundle; 15 | + (UIImage *)mj_arrowImage; 16 | + (NSString *)mj_localizedStringForKey:(NSString *)key value:(nullable NSString *)value; 17 | + (NSString *)mj_localizedStringForKey:(NSString *)key; 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: 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 3 | 4 | #import "UIScrollView+MJRefresh.h" 5 | #import "UIScrollView+MJExtension.h" 6 | #import "UIView+MJExtension.h" 7 | 8 | #import "MJRefreshNormalHeader.h" 9 | #import "MJRefreshGifHeader.h" 10 | 11 | #import "MJRefreshBackNormalFooter.h" 12 | #import "MJRefreshBackGifFooter.h" 13 | #import "MJRefreshAutoNormalFooter.h" 14 | #import "MJRefreshAutoGifFooter.h" -------------------------------------------------------------------------------- /ios/RNCWebView+MJRefresh/RNCWebViewManager+MJRefresh.m: -------------------------------------------------------------------------------- 1 | // 2 | // RCTWebViewManager+MJRefresh.m 3 | // ReactNativeMJRefresh 4 | // 5 | // Created by jeff.Li on 2019/9/11. 6 | // Copyright © 2019 opu. All rights reserved. 7 | // 8 | 9 | #import "RNCWebViewManager+MJRefresh.h" 10 | 11 | @implementation RNCWebViewManager (MJRefresh) 12 | 13 | #pragma mark - 新增暴露的属性 14 | 15 | RCT_EXPORT_VIEW_PROPERTY(enableMJRefresh, BOOL) 16 | RCT_EXPORT_VIEW_PROPERTY(mjRefreshing, BOOL) 17 | RCT_EXPORT_VIEW_PROPERTY(mjHeaderStyle, NSDictionary) 18 | RCT_EXPORT_VIEW_PROPERTY(onMJRefresh, RCTBubblingEventBlock) 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /ios/RNCWebView+MJRefresh/RNCWebViewManager+MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 2 | // RCTWebViewManager+MJRefresh.h 3 | // ReactNativeMJRefresh 4 | // 5 | // Created by jeff.Li on 2019/9/11. 6 | // Copyright © 2019 opu. All rights reserved. 7 | // 8 | 9 | #if __has_include() 10 | #import 11 | #elif __has_include("RNCWebViewManager.h") 12 | #import "RNCWebViewManager.h" 13 | #else 14 | #import "RNCWebView/RNCWebViewManager.h" 15 | #endif 16 | 17 | NS_ASSUME_NONNULL_BEGIN 18 | 19 | @interface RNCWebViewManager (MJRefresh) 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /ios/RCTScrollView+MJRefresh/RCTScrollViewManager+MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 2 | // RCTScrollViewManager+MJRefresh.h 3 | // ReactNativeMJRefresh 4 | // 5 | // Created by jeff.Li on 2019/9/11. 6 | // Copyright © 2019 opu. All rights reserved. 7 | // 8 | 9 | #if __has_include() 10 | #import 11 | #elif __has_include("RCTScrollViewManager.h") 12 | #import "RCTScrollViewManager.h" 13 | #else 14 | #import "React/RCTScrollViewManager.h" 15 | #endif 16 | 17 | NS_ASSUME_NONNULL_BEGIN 18 | 19 | @interface RCTScrollViewManager (MJRefresh) 20 | 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /example/android/app/build_defs.bzl: -------------------------------------------------------------------------------- 1 | """Helper definitions to glob .aar and .jar targets""" 2 | 3 | def create_aar_targets(aarfiles): 4 | for aarfile in aarfiles: 5 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] 6 | lib_deps.append(":" + name) 7 | android_prebuilt_aar( 8 | name = name, 9 | aar = aarfile, 10 | ) 11 | 12 | def create_jar_targets(jarfiles): 13 | for jarfile in jarfiles: 14 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] 15 | lib_deps.append(":" + name) 16 | prebuilt_jar( 17 | name = name, 18 | binary_jar = jarfile, 19 | ) 20 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshGifHeader.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshStateHeader.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshGifHeader : MJRefreshStateHeader 14 | @property (weak, nonatomic, readonly) UIImageView *gifView; 15 | 16 | /** 设置state状态下的动画图片images 动画持续时间duration*/ 17 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; 18 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state; 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoNormalFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoStateFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshAutoNormalFooter : MJRefreshAutoStateFooter 14 | @property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView; 15 | 16 | /** 菊花的样式 */ 17 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property"); 18 | @end 19 | 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoGifFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoStateFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter 14 | @property (weak, nonatomic, readonly) UIImageView *gifView; 15 | 16 | /** 设置state状态下的动画图片images 动画持续时间duration*/ 17 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; 18 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state; 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackGifFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackStateFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshBackGifFooter : MJRefreshBackStateFooter 14 | @property (weak, nonatomic, readonly) UIImageView *gifView; 15 | 16 | /** 设置state状态下的动画图片images 动画持续时间duration*/ 17 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state; 18 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state; 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | "MJRefreshHeaderIdleText" = "下拉可以刷新"; 2 | "MJRefreshHeaderPullingText" = "鬆開立即刷新"; 3 | "MJRefreshHeaderRefreshingText" = "正在刷新數據中..."; 4 | 5 | "MJRefreshAutoFooterIdleText" = "點擊或上拉加載更多"; 6 | "MJRefreshAutoFooterRefreshingText" = "正在加載更多的數據..."; 7 | "MJRefreshAutoFooterNoMoreDataText" = "已經全部加載完畢"; 8 | 9 | "MJRefreshBackFooterIdleText" = "上拉可以加載更多"; 10 | "MJRefreshBackFooterPullingText" = "鬆開立即加載更多"; 11 | "MJRefreshBackFooterRefreshingText" = "正在加載更多的數據..."; 12 | "MJRefreshBackFooterNoMoreDataText" = "已經全部加載完畢"; 13 | 14 | "MJRefreshHeaderLastTimeText" = "最後更新:"; 15 | "MJRefreshHeaderDateTodayText" = "今天"; 16 | "MJRefreshHeaderNoneLastDateText" = "無記錄"; 17 | -------------------------------------------------------------------------------- /example/ios/Pods/Local Podspecs/RNGestureHandler.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RNGestureHandler", 3 | "version": "1.6.1", 4 | "summary": "Experimental implementation of a new declarative API for gesture handling in react-native", 5 | "homepage": "https://github.com/software-mansion/react-native-gesture-handler", 6 | "license": "MIT", 7 | "authors": { 8 | "Krzysztof Magiera": "krzys.magiera@gmail.com" 9 | }, 10 | "platforms": { 11 | "ios": "9.0", 12 | "tvos": "9.0" 13 | }, 14 | "source": { 15 | "git": "https://github.com/software-mansion/react-native-gesture-handler", 16 | "tag": "1.6.1" 17 | }, 18 | "source_files": "ios/**/*.{h,m}", 19 | "dependencies": { 20 | "React": [ 21 | 22 | ] 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /example/ios/Pods/Local Podspecs/RNReanimated.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RNReanimated", 3 | "version": "1.9.0", 4 | "summary": "More powerful alternative to Animated library for React Native.", 5 | "description": "RNReanimated", 6 | "homepage": "https://github.com/software-mansion/react-native-reanimated", 7 | "license": "MIT", 8 | "authors": { 9 | "author": "author@domain.cn" 10 | }, 11 | "platforms": { 12 | "ios": "9.0", 13 | "tvos": "9.0" 14 | }, 15 | "source": { 16 | "git": "https://github.com/software-mansion/react-native-reanimated.git", 17 | "tag": "1.9.0" 18 | }, 19 | "source_files": "ios/**/*.{h,m}", 20 | "requires_arc": true, 21 | "dependencies": { 22 | "React": [ 23 | 24 | ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshNormalHeader.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshStateHeader.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshNormalHeader : MJRefreshStateHeader 14 | @property (weak, nonatomic, readonly) UIImageView *arrowView; 15 | @property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView; 16 | 17 | 18 | /** 菊花的样式 */ 19 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property"); 20 | @end 21 | 22 | NS_ASSUME_NONNULL_END 23 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackNormalFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackStateFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshBackNormalFooter : MJRefreshBackStateFooter 14 | @property (weak, nonatomic, readonly) UIImageView *arrowView; 15 | @property (weak, nonatomic, readonly) UIActivityIndicatorView *loadingView; 16 | 17 | /** 菊花的样式 */ 18 | @property (assign, nonatomic) UIActivityIndicatorViewStyle activityIndicatorViewStyle MJRefreshDeprecated("first deprecated in 3.2.2 - Use `loadingView` property"); 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /example/ios/Pods/Local Podspecs/RNScreens.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "RNScreens", 3 | "version": "2.8.0", 4 | "summary": "Native navigation primitives for your React Native app.", 5 | "description": "RNScreens - first incomplete navigation solution for your React Native app", 6 | "homepage": "https://github.com/kmagiera/react-native-screens", 7 | "license": "MIT", 8 | "authors": { 9 | "author": "author@domain.cn" 10 | }, 11 | "platforms": { 12 | "ios": "9.0", 13 | "tvos": "11.0" 14 | }, 15 | "source": { 16 | "git": "https://github.com/kmagiera/react-native-screens.git", 17 | "tag": "2.8.0" 18 | }, 19 | "source_files": "ios/**/*.{h,m}", 20 | "requires_arc": true, 21 | "dependencies": { 22 | "React": [ 23 | 24 | ] 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackStateFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/6/13. 6 | // Copyright © 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshBackStateFooter : MJRefreshBackFooter 14 | /** 文字距离圈圈、箭头的距离 */ 15 | @property (assign, nonatomic) CGFloat labelLeftInset; 16 | /** 显示刷新状态的label */ 17 | @property (weak, nonatomic, readonly) UILabel *stateLabel; 18 | /** 设置state状态下的文字 */ 19 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state; 20 | 21 | /** 获取state状态下的title */ 22 | - (NSString *)titleForState:(MJRefreshState)state; 23 | @end 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-native-mjrefresh-ios", 3 | "version": "0.6.0", 4 | "description": "the extension of MJRefresh in React Native", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/openUmbrella/react-native-mjrefresh-ios.git" 12 | }, 13 | "keywords": [ 14 | "MJRefresh", 15 | "refresh", 16 | "loadmore", 17 | "react native", 18 | "extension" 19 | ], 20 | "author": "opu", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/openUmbrella/react-native-mjrefresh-ios/issues" 24 | }, 25 | "homepage": "https://github.com/openUmbrella/react-native-mjrefresh-ios#readme" 26 | } 27 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoStateFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/6/13. 6 | // Copyright © 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshAutoStateFooter : MJRefreshAutoFooter 14 | /** 文字距离圈圈、箭头的距离 */ 15 | @property (assign, nonatomic) CGFloat labelLeftInset; 16 | /** 显示刷新状态的label */ 17 | @property (weak, nonatomic, readonly) UILabel *stateLabel; 18 | 19 | /** 设置state状态下的文字 */ 20 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state; 21 | 22 | /** 隐藏刷新状态的文字 */ 23 | @property (assign, nonatomic, getter=isRefreshingTitleHidden) BOOL refreshingTitleHidden; 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /example/src/router/mainStackRouter.js: -------------------------------------------------------------------------------- 1 | import {createStackNavigator} from 'react-navigation-stack'; 2 | 3 | import HomeScreen from '../screen/homeScreen'; 4 | import ListDemoScreen from '../screen/listDemoScreen'; 5 | import WebViewScreen from '../screen/webViewScreen'; 6 | import TipsScreen from '../screen/tipsScreen'; 7 | 8 | export default createStackNavigator({ 9 | Home: { 10 | screen: HomeScreen, 11 | navigationOptions: { 12 | title: '演示', 13 | // headerStyle: { 14 | // backgroundColor: '#10f9fa' 15 | // } 16 | }, 17 | }, 18 | ListDemo: { 19 | screen: ListDemoScreen, 20 | }, 21 | WebView: { 22 | screen: WebViewScreen, 23 | }, 24 | Tips: { 25 | screen: TipsScreen, 26 | navigationOptions: { 27 | title: '欢迎使用Tips组件', 28 | }, 29 | }, 30 | }); 31 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/UIView+MJExtension.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: 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 3 | // UIView+Extension.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 14-5-28. 7 | // Copyright (c) 2014年 小码哥. All rights reserved. 8 | // 9 | 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface UIView (MJExtension) 15 | @property (assign, nonatomic) CGFloat mj_x; 16 | @property (assign, nonatomic) CGFloat mj_y; 17 | @property (assign, nonatomic) CGFloat mj_w; 18 | @property (assign, nonatomic) CGFloat mj_h; 19 | @property (assign, nonatomic) CGSize mj_size; 20 | @property (assign, nonatomic) CGPoint mj_origin; 21 | @end 22 | 23 | NS_ASSUME_NONNULL_END 24 | -------------------------------------------------------------------------------- /ios/RNCWebView+MJRefresh/RNCWebView+MJRfresh.h: -------------------------------------------------------------------------------- 1 | // 2 | // RCTWebView+MJRfresh.h 3 | // ReactNativeMJRefresh 4 | // 5 | // Created by jeff.Li on 2019/9/11. 6 | // Copyright © 2019 opu. All rights reserved. 7 | // 8 | 9 | 10 | #if __has_include() 11 | #import 12 | #elif __has_include("RNCWebView.h") 13 | #import "RNCWebView.h" 14 | #else 15 | #import "RNCWebView/RNCWebView.h" 16 | #endif 17 | 18 | 19 | 20 | NS_ASSUME_NONNULL_BEGIN 21 | 22 | @interface RNCWebView (MJRfresh) 23 | 24 | // 下拉刷新 25 | @property (nonatomic, assign) BOOL enableMJRefresh; 26 | 27 | @property (nonatomic, assign) BOOL mjRefreshing; 28 | 29 | @property (nonatomic, strong) NSDictionary *mjHeaderStyle; 30 | 31 | @property (nonatomic, copy) RCTBubblingEventBlock onMJRefresh; 32 | 33 | 34 | @end 35 | 36 | NS_ASSUME_NONNULL_END 37 | -------------------------------------------------------------------------------- /example/ios/exampleTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /ios/RCTScrollView+MJRefresh/RCTScrollViewManager+MJRefresh.m: -------------------------------------------------------------------------------- 1 | // 2 | // RCTScrollViewManager+MJRefresh.m 3 | // ReactNativeMJRefresh 4 | // 5 | // Created by jeff.Li on 2019/9/11. 6 | // Copyright © 2019 opu. All rights reserved. 7 | // 8 | 9 | #import "RCTScrollViewManager+MJRefresh.h" 10 | 11 | @implementation RCTScrollViewManager (MJRefresh) 12 | 13 | RCT_EXPORT_VIEW_PROPERTY(enableMJRefresh, BOOL) 14 | RCT_EXPORT_VIEW_PROPERTY(mjRefreshing, BOOL) 15 | RCT_EXPORT_VIEW_PROPERTY(mjHeaderStyle, NSDictionary) 16 | RCT_EXPORT_VIEW_PROPERTY(onMJRefresh, RCTBubblingEventBlock) 17 | 18 | RCT_EXPORT_VIEW_PROPERTY(enableMJLoadMore, BOOL) 19 | RCT_EXPORT_VIEW_PROPERTY(mjLoadingMore, BOOL) 20 | RCT_EXPORT_VIEW_PROPERTY(mjLoadAll, BOOL) 21 | RCT_EXPORT_VIEW_PROPERTY(mjFooterStyle, NSDictionary) 22 | RCT_EXPORT_VIEW_PROPERTY(onMJLoadMore, RCTBubblingEventBlock) 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /example/ios/example-tvOSTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshStateHeader.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshHeader.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshStateHeader : MJRefreshHeader 14 | #pragma mark - 刷新时间相关 15 | /** 利用这个block来决定显示的更新时间文字 */ 16 | @property (copy, nonatomic, nullable) NSString *(^lastUpdatedTimeText)(NSDate * _Nullable lastUpdatedTime); 17 | /** 显示上一次刷新时间的label */ 18 | @property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel; 19 | 20 | #pragma mark - 状态相关 21 | /** 文字距离圈圈、箭头的距离 */ 22 | @property (assign, nonatomic) CGFloat labelLeftInset; 23 | /** 显示刷新状态的label */ 24 | @property (weak, nonatomic, readonly) UILabel *stateLabel; 25 | /** 设置state状态下的文字 */ 26 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state; 27 | @end 28 | 29 | NS_ASSUME_NONNULL_END 30 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoFooter.h 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshFooter.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MJRefreshAutoFooter : MJRefreshFooter 14 | /** 是否自动刷新(默认为YES) */ 15 | @property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh; 16 | 17 | /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */ 18 | @property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("请使用triggerAutomaticallyRefreshPercent属性"); 19 | 20 | /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */ 21 | @property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent; 22 | 23 | /** 自动触发次数, 默认为 1, 仅在拖拽 ScrollView 时才生效, 24 | 25 | 如果为 -1, 则为无限触发 26 | */ 27 | @property (nonatomic) NSInteger autoTriggerTimes; 28 | @end 29 | 30 | NS_ASSUME_NONNULL_END 31 | -------------------------------------------------------------------------------- /example/android/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 14 | 15 | # When configured, Gradle will run in incubating parallel mode. 16 | # This option should only be used with decoupled projects. More details, visit 17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 18 | # org.gradle.parallel=true 19 | 20 | android.useAndroidX=true 21 | android.enableJetifier=true 22 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: 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 3 | // UIScrollView+Extension.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 14-5-28. 7 | // Copyright (c) 2014年 小码哥. All rights reserved. 8 | // 9 | 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface UIScrollView (MJExtension) 15 | @property (readonly, nonatomic) UIEdgeInsets mj_inset; 16 | 17 | @property (assign, nonatomic) CGFloat mj_insetT; 18 | @property (assign, nonatomic) CGFloat mj_insetB; 19 | @property (assign, nonatomic) CGFloat mj_insetL; 20 | @property (assign, nonatomic) CGFloat mj_insetR; 21 | 22 | @property (assign, nonatomic) CGFloat mj_offsetX; 23 | @property (assign, nonatomic) CGFloat mj_offsetY; 24 | 25 | @property (assign, nonatomic) CGFloat mj_contentW; 26 | @property (assign, nonatomic) CGFloat mj_contentH; 27 | @end 28 | 29 | NS_ASSUME_NONNULL_END 30 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | 24 | # Android/IntelliJ 25 | # 26 | build/ 27 | .idea 28 | .gradle 29 | local.properties 30 | *.iml 31 | 32 | # node.js 33 | # 34 | node_modules/ 35 | npm-debug.log 36 | yarn-error.log 37 | 38 | # BUCK 39 | buck-out/ 40 | \.buckd/ 41 | *.keystore 42 | !debug.keystore 43 | 44 | # fastlane 45 | # 46 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 47 | # screenshots whenever they are needed. 48 | # For more information about the recommended setup visit: 49 | # https://docs.fastlane.tools/best-practices/source-control/ 50 | 51 | */fastlane/report.xml 52 | */fastlane/Preview.html 53 | */fastlane/screenshots 54 | 55 | # Bundle artifact 56 | *.jsbundle 57 | 58 | # CocoaPods 59 | /ios/Pods/ 60 | -------------------------------------------------------------------------------- /example/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 13 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 opu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: 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 3 | // UIScrollView+MJRefresh.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/4. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 给ScrollView增加下拉刷新、上拉刷新的功能 9 | 10 | #import 11 | #import "MJRefreshConst.h" 12 | 13 | @class MJRefreshHeader, MJRefreshFooter; 14 | 15 | NS_ASSUME_NONNULL_BEGIN 16 | 17 | @interface UIScrollView (MJRefresh) 18 | /** 下拉刷新控件 */ 19 | @property (strong, nonatomic, nullable) MJRefreshHeader *mj_header; 20 | @property (strong, nonatomic, nullable) MJRefreshHeader *header MJRefreshDeprecated("使用mj_header"); 21 | /** 上拉刷新控件 */ 22 | @property (strong, nonatomic, nullable) MJRefreshFooter *mj_footer; 23 | @property (strong, nonatomic, nullable) MJRefreshFooter *footer MJRefreshDeprecated("使用mj_footer"); 24 | 25 | #pragma mark - other 26 | - (NSInteger)mj_totalDataCount; 27 | 28 | @end 29 | 30 | NS_ASSUME_NONNULL_END 31 | -------------------------------------------------------------------------------- /example/ios/example/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "scale" : "2x", 6 | "size" : "20x20" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "scale" : "3x", 11 | "size" : "20x20" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "scale" : "2x", 16 | "size" : "29x29" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "scale" : "3x", 21 | "size" : "29x29" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "scale" : "2x", 26 | "size" : "40x40" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "scale" : "3x", 31 | "size" : "40x40" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "scale" : "2x", 36 | "size" : "60x60" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "scale" : "3x", 41 | "size" : "60x60" 42 | }, 43 | { 44 | "idiom" : "ios-marketing", 45 | "scale" : "1x", 46 | "size" : "1024x1024" 47 | } 48 | ], 49 | "info" : { 50 | "author" : "xcode", 51 | "version" : 1 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /ios/MJRefreshExtension/XYRefreshGifHeader.h: -------------------------------------------------------------------------------- 1 | // 2 | // XYRefreshGifHeader.h 3 | // ReactNativeMJRefresh 4 | // 5 | // Created by jeff.Li on 2019/9/11. 6 | // Copyright © 2019 opu. All rights reserved. 7 | // 8 | 9 | 10 | #if __has_include() 11 | #import 12 | #elif __has_include("MJRefreshGifHeader.h") 13 | #import "MJRefreshGifHeader.h" 14 | #else 15 | #import "MJRefresh/MJRefreshGifHeader.h" 16 | #endif 17 | 18 | 19 | NS_ASSUME_NONNULL_BEGIN 20 | 21 | @interface XYRefreshGifHeader : MJRefreshGifHeader 22 | 23 | @property (nonatomic, strong) NSDictionary *style; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | 29 | @interface UILabel(XYRefresh) 30 | 31 | /** 32 | 获取label中文本的高度 33 | 34 | @return 高度 35 | */ 36 | - (CGFloat)xy_textHeight; 37 | 38 | @end 39 | 40 | @interface UIColor (XYColor) 41 | 42 | /** 43 | 通过色号返回颜色, 如果格式错误,默认返回黑色 44 | 45 | @param color 色号, 格式可以是 @"rgb(12,34,23)"、 @"rgba(12,34,43,0.5)" 也可以是 @“#123456”、 @“0X123456”、 @“123456” 46 | @return 颜色 47 | */ 48 | +(UIColor *_Nonnull)xy_colorWithColorString: (NSString *_Nonnull)color; 49 | 50 | @end 51 | -------------------------------------------------------------------------------- /example/android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | ext { 5 | buildToolsVersion = "28.0.3" 6 | minSdkVersion = 16 7 | compileSdkVersion = 28 8 | targetSdkVersion = 28 9 | } 10 | repositories { 11 | google() 12 | jcenter() 13 | } 14 | dependencies { 15 | classpath("com.android.tools.build:gradle:3.4.2") 16 | 17 | // NOTE: Do not place your application dependencies here; they belong 18 | // in the individual module build.gradle files 19 | } 20 | } 21 | 22 | allprojects { 23 | repositories { 24 | mavenLocal() 25 | maven { 26 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm 27 | url("$rootDir/../node_modules/react-native/android") 28 | } 29 | maven { 30 | // Android JSC is installed from npm 31 | url("$rootDir/../node_modules/jsc-android/dist") 32 | } 33 | 34 | google() 35 | jcenter() 36 | maven { url 'https://jitpack.io' } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ios/RCTScrollView+MJRefresh/RCTScrollView+MJRefresh.h: -------------------------------------------------------------------------------- 1 | // 2 | // RCTScrollView+MJRefresh.h 3 | // ReactNativeMJRefresh 4 | // 5 | // Created by jeff.Li on 2019/9/11. 6 | // Copyright © 2019 opu. All rights reserved. 7 | // 8 | 9 | #if __has_include() 10 | #import 11 | #elif __has_include("RCTScrollView.h") 12 | #import "RCTScrollView.h" 13 | #else 14 | #import "React/RCTScrollView.h" 15 | #endif 16 | 17 | NS_ASSUME_NONNULL_BEGIN 18 | 19 | @interface RCTScrollView (MJRefresh) 20 | 21 | // 下拉刷新 22 | @property (nonatomic, assign) BOOL enableMJRefresh; 23 | 24 | @property (nonatomic, assign) BOOL mjRefreshing; 25 | 26 | @property (nonatomic, strong) NSDictionary *mjHeaderStyle; 27 | 28 | @property (nonatomic, copy) RCTBubblingEventBlock onMJRefresh; 29 | 30 | //上拉加载更多 31 | @property (nonatomic, assign) BOOL enableMJLoadMore; 32 | 33 | @property (nonatomic, assign) BOOL mjLoadingMore; 34 | 35 | @property (nonatomic, assign) BOOL mjLoadAll; 36 | 37 | @property (nonatomic, strong) NSDictionary *mjFooterStyle; 38 | 39 | @property (nonatomic, copy) RCTBubblingEventBlock onMJLoadMore; 40 | 41 | @end 42 | 43 | NS_ASSUME_NONNULL_END 44 | 45 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "android": "react-native run-android", 7 | "ios": "react-native run-ios", 8 | "start": "react-native start", 9 | "test": "jest", 10 | "lint": "eslint ." 11 | }, 12 | "dependencies": { 13 | "@react-native-community/masked-view": "^0.1.10", 14 | "react": "16.9.0", 15 | "react-native": "0.61.4", 16 | "react-native-gesture-handler": "^1.6.1", 17 | "react-native-reanimated": "^1.9.0", 18 | "react-native-root-tips": "^1.1.0", 19 | "react-native-safe-area-context": "^2.0.3", 20 | "react-native-screens": "^2.8.0", 21 | "react-native-webview": "^10.1.0", 22 | "react-navigation": "^4.3.9", 23 | "react-navigation-stack": "^2.5.1" 24 | }, 25 | "devDependencies": { 26 | "@babel/core": "^7.10.1", 27 | "@babel/runtime": "^7.10.1", 28 | "@react-native-community/eslint-config": "^1.1.0", 29 | "babel-jest": "^26.0.1", 30 | "eslint": "^7.1.0", 31 | "jest": "^26.0.1", 32 | "metro-react-native-babel-preset": "^0.59.0", 33 | "react-test-renderer": "16.9.0" 34 | }, 35 | "jest": { 36 | "preset": "react-native" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Base/MJRefreshHeader.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: 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 3 | // MJRefreshHeader.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/4. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 下拉刷新控件:负责监控用户下拉的状态 9 | 10 | #import "MJRefreshComponent.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface MJRefreshHeader : MJRefreshComponent 15 | /** 创建header */ 16 | + (instancetype)headerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock; 17 | /** 创建header */ 18 | + (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; 19 | 20 | /** 这个key用来存储上一次下拉刷新成功的时间 */ 21 | @property (copy, nonatomic) NSString *lastUpdatedTimeKey; 22 | /** 上一次下拉刷新成功的时间 */ 23 | @property (strong, nonatomic, readonly, nullable) NSDate *lastUpdatedTime; 24 | 25 | /** 忽略多少scrollView的contentInset的top */ 26 | @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop; 27 | 28 | /** 默认是关闭状态, 如果遇到 CollectionView 的动画异常问题可以尝试打开 */ 29 | @property (nonatomic) BOOL isCollectionViewAnimationBug; 30 | @end 31 | 32 | NS_ASSUME_NONNULL_END 33 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: 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 3 | // MJRefreshFooter.h 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/5. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 上拉刷新控件 9 | 10 | #import "MJRefreshComponent.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | @interface MJRefreshFooter : MJRefreshComponent 15 | /** 创建footer */ 16 | + (instancetype)footerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock; 17 | /** 创建footer */ 18 | + (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; 19 | 20 | /** 提示没有更多的数据 */ 21 | - (void)endRefreshingWithNoMoreData; 22 | - (void)noticeNoMoreData MJRefreshDeprecated("使用endRefreshingWithNoMoreData"); 23 | 24 | /** 重置没有更多的数据(消除没有更多数据的状态) */ 25 | - (void)resetNoMoreData; 26 | 27 | /** 忽略多少scrollView的contentInset的bottom */ 28 | @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom; 29 | 30 | /** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏。默认是NO) */ 31 | @property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden MJRefreshDeprecated("已废弃此属性,开发者请自行控制footer的显示和隐藏"); 32 | @end 33 | 34 | NS_ASSUME_NONNULL_END 35 | -------------------------------------------------------------------------------- /example/android/app/BUCK: -------------------------------------------------------------------------------- 1 | # To learn about Buck see [Docs](https://buckbuild.com/). 2 | # To run your application with Buck: 3 | # - install Buck 4 | # - `npm start` - to start the packager 5 | # - `cd android` 6 | # - `keytool -genkey -v -keystore keystores/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"` 7 | # - `./gradlew :app:copyDownloadableDepsToLibs` - make all Gradle compile dependencies available to Buck 8 | # - `buck install -r android/app` - compile, install and run application 9 | # 10 | 11 | load(":build_defs.bzl", "create_aar_targets", "create_jar_targets") 12 | 13 | lib_deps = [] 14 | 15 | create_aar_targets(glob(["libs/*.aar"])) 16 | 17 | create_jar_targets(glob(["libs/*.jar"])) 18 | 19 | android_library( 20 | name = "all-libs", 21 | exported_deps = lib_deps, 22 | ) 23 | 24 | android_library( 25 | name = "app-code", 26 | srcs = glob([ 27 | "src/main/java/**/*.java", 28 | ]), 29 | deps = [ 30 | ":all-libs", 31 | ":build_config", 32 | ":res", 33 | ], 34 | ) 35 | 36 | android_build_config( 37 | name = "build_config", 38 | package = "com.example", 39 | ) 40 | 41 | android_resource( 42 | name = "res", 43 | package = "com.example", 44 | res = "src/main/res", 45 | ) 46 | 47 | android_binary( 48 | name = "app", 49 | keystore = "//android/keystores:debug", 50 | manifest = "src/main/AndroidManifest.xml", 51 | package_type = "debug", 52 | deps = [ 53 | ":app-code", 54 | ], 55 | ) 56 | -------------------------------------------------------------------------------- /example/ios/example/AppDelegate.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | #import "AppDelegate.h" 9 | 10 | #import 11 | #import 12 | #import 13 | 14 | @implementation AppDelegate 15 | 16 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 17 | { 18 | RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; 19 | RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge 20 | moduleName:@"example" 21 | initialProperties:nil]; 22 | 23 | rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; 24 | 25 | self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; 26 | UIViewController *rootViewController = [UIViewController new]; 27 | rootViewController.view = rootView; 28 | self.window.rootViewController = rootViewController; 29 | [self.window makeKeyAndVisible]; 30 | return YES; 31 | } 32 | 33 | - (NSURL *)sourceURLForBridge:(RCTBridge *)bridge 34 | { 35 | #if DEBUG 36 | return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; 37 | #else 38 | return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; 39 | #endif 40 | } 41 | 42 | @end 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xccheckout 23 | *.xcscmblueprint 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | 31 | # CocoaPods 32 | # 33 | # We recommend against adding the Pods directory to your .gitignore. However 34 | # you should judge for yourself, the pros and cons are mentioned at: 35 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 36 | # 37 | # Pods/ 38 | 39 | # Carthage 40 | # 41 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 42 | # Carthage/Checkouts 43 | 44 | Carthage/Build 45 | 46 | # fastlane 47 | # 48 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 49 | # screenshots whenever they are needed. 50 | # For more information about the recommended setup visit: 51 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 52 | 53 | fastlane/report.xml 54 | fastlane/Preview.html 55 | fastlane/screenshots/**/*.png 56 | fastlane/test_output 57 | 58 | # Code Injection 59 | # 60 | # After new code Injection tools there's a generated folder /iOSInjectionProject 61 | # https://github.com/johnno1962/injectionforxcode 62 | 63 | iOSInjectionProject/ 64 | 65 | example/ 66 | -------------------------------------------------------------------------------- /example/ios/example-tvOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSExceptionDomains 28 | 29 | localhost 30 | 31 | NSExceptionAllowsInsecureHTTPLoads 32 | 33 | 34 | 35 | 36 | NSLocationWhenInUseUsageDescription 37 | 38 | UILaunchStoryboardName 39 | LaunchScreen 40 | UIRequiredDeviceCapabilities 41 | 42 | armv7 43 | 44 | UISupportedInterfaceOrientations 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationLandscapeLeft 48 | UIInterfaceOrientationLandscapeRight 49 | 50 | UIViewControllerBasedStatusBarAppearance 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Base/MJRefreshFooter.m: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: 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 3 | // MJRefreshFooter.m 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/5. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 9 | 10 | #import "MJRefreshFooter.h" 11 | #include "UIScrollView+MJRefresh.h" 12 | 13 | @interface MJRefreshFooter() 14 | 15 | @end 16 | 17 | @implementation MJRefreshFooter 18 | #pragma mark - 构造方法 19 | + (instancetype)footerWithRefreshingBlock:(MJRefreshComponentAction)refreshingBlock 20 | { 21 | MJRefreshFooter *cmp = [[self alloc] init]; 22 | cmp.refreshingBlock = refreshingBlock; 23 | return cmp; 24 | } 25 | + (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action 26 | { 27 | MJRefreshFooter *cmp = [[self alloc] init]; 28 | [cmp setRefreshingTarget:target refreshingAction:action]; 29 | return cmp; 30 | } 31 | 32 | #pragma mark - 重写父类的方法 33 | - (void)prepare 34 | { 35 | [super prepare]; 36 | 37 | // 设置自己的高度 38 | self.mj_h = MJRefreshFooterHeight; 39 | 40 | // 默认不会自动隐藏 41 | // self.automaticallyHidden = NO; 42 | } 43 | 44 | #pragma mark - 公共方法 45 | - (void)endRefreshingWithNoMoreData 46 | { 47 | MJRefreshDispatchAsyncOnMainQueue(self.state = MJRefreshStateNoMoreData;) 48 | } 49 | 50 | - (void)noticeNoMoreData 51 | { 52 | [self endRefreshingWithNoMoreData]; 53 | } 54 | 55 | - (void)resetNoMoreData 56 | { 57 | MJRefreshDispatchAsyncOnMainQueue(self.state = MJRefreshStateIdle;) 58 | } 59 | 60 | - (void)setAutomaticallyHidden:(BOOL)automaticallyHidden 61 | { 62 | _automaticallyHidden = automaticallyHidden; 63 | } 64 | @end 65 | -------------------------------------------------------------------------------- /example/ios/example/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | example 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSRequiresIPhoneOS 26 | 27 | NSAppTransportSecurity 28 | 29 | NSAllowsArbitraryLoads 30 | 31 | NSExceptionDomains 32 | 33 | localhost 34 | 35 | NSExceptionAllowsInsecureHTTPLoads 36 | 37 | 38 | 39 | 40 | NSLocationWhenInUseUsageDescription 41 | 42 | UILaunchStoryboardName 43 | LaunchScreen 44 | UIRequiredDeviceCapabilities 45 | 46 | armv7 47 | 48 | UISupportedInterfaceOrientations 49 | 50 | UIInterfaceOrientationPortrait 51 | UIInterfaceOrientationLandscapeLeft 52 | UIInterfaceOrientationLandscapeRight 53 | 54 | UIViewControllerBasedStatusBarAppearance 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/UIView+MJExtension.m: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: 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 3 | // UIView+Extension.m 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 14-5-28. 7 | // Copyright (c) 2014年 小码哥. All rights reserved. 8 | // 9 | 10 | #import "UIView+MJExtension.h" 11 | 12 | @implementation UIView (MJExtension) 13 | - (void)setMj_x:(CGFloat)mj_x 14 | { 15 | CGRect frame = self.frame; 16 | frame.origin.x = mj_x; 17 | self.frame = frame; 18 | } 19 | 20 | - (CGFloat)mj_x 21 | { 22 | return self.frame.origin.x; 23 | } 24 | 25 | - (void)setMj_y:(CGFloat)mj_y 26 | { 27 | CGRect frame = self.frame; 28 | frame.origin.y = mj_y; 29 | self.frame = frame; 30 | } 31 | 32 | - (CGFloat)mj_y 33 | { 34 | return self.frame.origin.y; 35 | } 36 | 37 | - (void)setMj_w:(CGFloat)mj_w 38 | { 39 | CGRect frame = self.frame; 40 | frame.size.width = mj_w; 41 | self.frame = frame; 42 | } 43 | 44 | - (CGFloat)mj_w 45 | { 46 | return self.frame.size.width; 47 | } 48 | 49 | - (void)setMj_h:(CGFloat)mj_h 50 | { 51 | CGRect frame = self.frame; 52 | frame.size.height = mj_h; 53 | self.frame = frame; 54 | } 55 | 56 | - (CGFloat)mj_h 57 | { 58 | return self.frame.size.height; 59 | } 60 | 61 | - (void)setMj_size:(CGSize)mj_size 62 | { 63 | CGRect frame = self.frame; 64 | frame.size = mj_size; 65 | self.frame = frame; 66 | } 67 | 68 | - (CGSize)mj_size 69 | { 70 | return self.frame.size; 71 | } 72 | 73 | - (void)setMj_origin:(CGPoint)mj_origin 74 | { 75 | CGRect frame = self.frame; 76 | frame.origin = mj_origin; 77 | self.frame = frame; 78 | } 79 | 80 | - (CGPoint)mj_origin 81 | { 82 | return self.frame.origin; 83 | } 84 | @end 85 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/MJRefreshConst.m: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: 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 3 | #import 4 | 5 | const CGFloat MJRefreshLabelLeftInset = 25; 6 | const CGFloat MJRefreshHeaderHeight = 54.0; 7 | const CGFloat MJRefreshFooterHeight = 44.0; 8 | const CGFloat MJRefreshFastAnimationDuration = 0.25; 9 | const CGFloat MJRefreshSlowAnimationDuration = 0.4; 10 | 11 | NSString *const MJRefreshKeyPathContentOffset = @"contentOffset"; 12 | NSString *const MJRefreshKeyPathContentInset = @"contentInset"; 13 | NSString *const MJRefreshKeyPathContentSize = @"contentSize"; 14 | NSString *const MJRefreshKeyPathPanState = @"state"; 15 | 16 | NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey"; 17 | 18 | NSString *const MJRefreshHeaderIdleText = @"MJRefreshHeaderIdleText"; 19 | NSString *const MJRefreshHeaderPullingText = @"MJRefreshHeaderPullingText"; 20 | NSString *const MJRefreshHeaderRefreshingText = @"MJRefreshHeaderRefreshingText"; 21 | 22 | NSString *const MJRefreshAutoFooterIdleText = @"MJRefreshAutoFooterIdleText"; 23 | NSString *const MJRefreshAutoFooterRefreshingText = @"MJRefreshAutoFooterRefreshingText"; 24 | NSString *const MJRefreshAutoFooterNoMoreDataText = @"MJRefreshAutoFooterNoMoreDataText"; 25 | 26 | NSString *const MJRefreshBackFooterIdleText = @"MJRefreshBackFooterIdleText"; 27 | NSString *const MJRefreshBackFooterPullingText = @"MJRefreshBackFooterPullingText"; 28 | NSString *const MJRefreshBackFooterRefreshingText = @"MJRefreshBackFooterRefreshingText"; 29 | NSString *const MJRefreshBackFooterNoMoreDataText = @"MJRefreshBackFooterNoMoreDataText"; 30 | 31 | NSString *const MJRefreshHeaderLastTimeText = @"MJRefreshHeaderLastTimeText"; 32 | NSString *const MJRefreshHeaderDateTodayText = @"MJRefreshHeaderDateTodayText"; 33 | NSString *const MJRefreshHeaderNoneLastDateText = @"MJRefreshHeaderNoneLastDateText"; -------------------------------------------------------------------------------- /example/ios/exampleTests/exampleTests.m: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) Facebook, Inc. and its affiliates. 3 | * 4 | * This source code is licensed under the MIT license found in the 5 | * LICENSE file in the root directory of this source tree. 6 | */ 7 | 8 | #import 9 | #import 10 | 11 | #import 12 | #import 13 | 14 | #define TIMEOUT_SECONDS 600 15 | #define TEXT_TO_LOOK_FOR @"Welcome to React" 16 | 17 | @interface exampleTests : XCTestCase 18 | 19 | @end 20 | 21 | @implementation exampleTests 22 | 23 | - (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test 24 | { 25 | if (test(view)) { 26 | return YES; 27 | } 28 | for (UIView *subview in [view subviews]) { 29 | if ([self findSubviewInView:subview matching:test]) { 30 | return YES; 31 | } 32 | } 33 | return NO; 34 | } 35 | 36 | - (void)testRendersWelcomeScreen 37 | { 38 | UIViewController *vc = [[[RCTSharedApplication() delegate] window] rootViewController]; 39 | NSDate *date = [NSDate dateWithTimeIntervalSinceNow:TIMEOUT_SECONDS]; 40 | BOOL foundElement = NO; 41 | 42 | __block NSString *redboxError = nil; 43 | #ifdef DEBUG 44 | RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { 45 | if (level >= RCTLogLevelError) { 46 | redboxError = message; 47 | } 48 | }); 49 | #endif 50 | 51 | while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { 52 | [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 53 | [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; 54 | 55 | foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { 56 | if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { 57 | return YES; 58 | } 59 | return NO; 60 | }]; 61 | } 62 | 63 | #ifdef DEBUG 64 | RCTSetLogFunction(RCTDefaultLogFunction); 65 | #endif 66 | 67 | XCTAssertNil(redboxError, @"RedBox error: %@", redboxError); 68 | XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); 69 | } 70 | 71 | 72 | @end 73 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackStateFooter.m 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/6/13. 6 | // Copyright © 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackStateFooter.h" 10 | 11 | @interface MJRefreshBackStateFooter() 12 | { 13 | /** 显示刷新状态的label */ 14 | __unsafe_unretained UILabel *_stateLabel; 15 | } 16 | /** 所有状态对应的文字 */ 17 | @property (strong, nonatomic) NSMutableDictionary *stateTitles; 18 | @end 19 | 20 | @implementation MJRefreshBackStateFooter 21 | #pragma mark - 懒加载 22 | - (NSMutableDictionary *)stateTitles 23 | { 24 | if (!_stateTitles) { 25 | self.stateTitles = [NSMutableDictionary dictionary]; 26 | } 27 | return _stateTitles; 28 | } 29 | 30 | - (UILabel *)stateLabel 31 | { 32 | if (!_stateLabel) { 33 | [self addSubview:_stateLabel = [UILabel mj_label]]; 34 | } 35 | return _stateLabel; 36 | } 37 | 38 | #pragma mark - 公共方法 39 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state 40 | { 41 | if (title == nil) return; 42 | self.stateTitles[@(state)] = title; 43 | self.stateLabel.text = self.stateTitles[@(self.state)]; 44 | } 45 | 46 | - (NSString *)titleForState:(MJRefreshState)state { 47 | return self.stateTitles[@(state)]; 48 | } 49 | 50 | #pragma mark - 重写父类的方法 51 | - (void)prepare 52 | { 53 | [super prepare]; 54 | 55 | // 初始化间距 56 | self.labelLeftInset = MJRefreshLabelLeftInset; 57 | 58 | // 初始化文字 59 | [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterIdleText] forState:MJRefreshStateIdle]; 60 | [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterPullingText] forState:MJRefreshStatePulling]; 61 | [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterRefreshingText] forState:MJRefreshStateRefreshing]; 62 | [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterNoMoreDataText] forState:MJRefreshStateNoMoreData]; 63 | } 64 | 65 | - (void)placeSubviews 66 | { 67 | [super placeSubviews]; 68 | 69 | if (self.stateLabel.constraints.count) return; 70 | 71 | // 状态标签 72 | self.stateLabel.frame = self.bounds; 73 | } 74 | 75 | - (void)setState:(MJRefreshState)state 76 | { 77 | MJRefreshCheckState 78 | 79 | // 设置状态文字 80 | self.stateLabel.text = self.stateTitles[@(state)]; 81 | } 82 | @end 83 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoNormalFooter.m 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoNormalFooter.h" 10 | 11 | @interface MJRefreshAutoNormalFooter() 12 | @property (weak, nonatomic) UIActivityIndicatorView *loadingView; 13 | @end 14 | 15 | @implementation MJRefreshAutoNormalFooter 16 | #pragma mark - 懒加载子控件 17 | - (UIActivityIndicatorView *)loadingView 18 | { 19 | if (!_loadingView) { 20 | UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:_activityIndicatorViewStyle]; 21 | loadingView.hidesWhenStopped = YES; 22 | [self addSubview:_loadingView = loadingView]; 23 | } 24 | return _loadingView; 25 | } 26 | 27 | - (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle 28 | { 29 | _activityIndicatorViewStyle = activityIndicatorViewStyle; 30 | 31 | [self.loadingView removeFromSuperview]; 32 | self.loadingView = nil; 33 | [self setNeedsLayout]; 34 | } 35 | #pragma mark - 重写父类的方法 36 | - (void)prepare 37 | { 38 | [super prepare]; 39 | 40 | #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 41 | if (@available(iOS 13.0, *)) { 42 | _activityIndicatorViewStyle = UIActivityIndicatorViewStyleMedium; 43 | return; 44 | } 45 | #endif 46 | 47 | _activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray; 48 | } 49 | 50 | - (void)placeSubviews 51 | { 52 | [super placeSubviews]; 53 | 54 | if (self.loadingView.constraints.count) return; 55 | 56 | // 圈圈 57 | CGFloat loadingCenterX = self.mj_w * 0.5; 58 | if (!self.isRefreshingTitleHidden) { 59 | loadingCenterX -= self.stateLabel.mj_textWidth * 0.5 + self.labelLeftInset; 60 | } 61 | CGFloat loadingCenterY = self.mj_h * 0.5; 62 | self.loadingView.center = CGPointMake(loadingCenterX, loadingCenterY); 63 | } 64 | 65 | - (void)setState:(MJRefreshState)state 66 | { 67 | MJRefreshCheckState 68 | 69 | // 根据状态做事情 70 | if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { 71 | [self.loadingView stopAnimating]; 72 | } else if (state == MJRefreshStateRefreshing) { 73 | [self.loadingView startAnimating]; 74 | } 75 | } 76 | 77 | @end 78 | -------------------------------------------------------------------------------- /example/.flowconfig: -------------------------------------------------------------------------------- 1 | [ignore] 2 | ; We fork some components by platform 3 | .*/*[.]android.js 4 | 5 | ; Ignore "BUCK" generated dirs 6 | /\.buckd/ 7 | 8 | ; Ignore polyfills 9 | node_modules/react-native/Libraries/polyfills/.* 10 | 11 | ; These should not be required directly 12 | ; require from fbjs/lib instead: require('fbjs/lib/warning') 13 | node_modules/warning/.* 14 | 15 | ; Flow doesn't support platforms 16 | .*/Libraries/Utilities/LoadingView.js 17 | 18 | [untyped] 19 | .*/node_modules/@react-native-community/cli/.*/.* 20 | 21 | [include] 22 | 23 | [libs] 24 | node_modules/react-native/Libraries/react-native/react-native-interface.js 25 | node_modules/react-native/flow/ 26 | 27 | [options] 28 | emoji=true 29 | 30 | esproposal.optional_chaining=enable 31 | esproposal.nullish_coalescing=enable 32 | 33 | module.file_ext=.js 34 | module.file_ext=.json 35 | module.file_ext=.ios.js 36 | 37 | munge_underscores=true 38 | 39 | module.name_mapper='^react-native$' -> '/node_modules/react-native/Libraries/react-native/react-native-implementation' 40 | module.name_mapper='^react-native/\(.*\)$' -> '/node_modules/react-native/\1' 41 | module.name_mapper='^[./a-zA-Z0-9$_-]+\.\(bmp\|gif\|jpg\|jpeg\|png\|psd\|svg\|webp\|m4v\|mov\|mp4\|mpeg\|mpg\|webm\|aac\|aiff\|caf\|m4a\|mp3\|wav\|html\|pdf\)$' -> '/node_modules/react-native/Libraries/Image/RelativeImageStub' 42 | 43 | suppress_type=$FlowIssue 44 | suppress_type=$FlowFixMe 45 | suppress_type=$FlowFixMeProps 46 | suppress_type=$FlowFixMeState 47 | 48 | suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\) 49 | suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+ 50 | suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError 51 | 52 | [lints] 53 | sketchy-null-number=warn 54 | sketchy-null-mixed=warn 55 | sketchy-number=warn 56 | untyped-type-import=warn 57 | nonstrict-import=warn 58 | deprecated-type=warn 59 | unsafe-getters-setters=warn 60 | inexact-spread=warn 61 | unnecessary-invariant=warn 62 | signature-verification-failure=warn 63 | deprecated-utility=error 64 | 65 | [strict] 66 | deprecated-type 67 | nonstrict-import 68 | sketchy-null 69 | unclear-type 70 | unsafe-getters-setters 71 | untyped-import 72 | untyped-type-import 73 | 74 | [version] 75 | ^0.105.0 76 | -------------------------------------------------------------------------------- /example/android/app/src/main/java/com/example/MainApplication.java: -------------------------------------------------------------------------------- 1 | package com.example; 2 | 3 | import android.app.Application; 4 | import android.content.Context; 5 | import com.facebook.react.PackageList; 6 | import com.facebook.react.ReactApplication; 7 | import com.reactnativecommunity.webview.RNCWebViewPackage; 8 | import com.facebook.react.ReactNativeHost; 9 | import com.facebook.react.ReactPackage; 10 | import com.facebook.soloader.SoLoader; 11 | import java.lang.reflect.InvocationTargetException; 12 | import java.util.List; 13 | 14 | public class MainApplication extends Application implements ReactApplication { 15 | 16 | private final ReactNativeHost mReactNativeHost = 17 | new ReactNativeHost(this) { 18 | @Override 19 | public boolean getUseDeveloperSupport() { 20 | return BuildConfig.DEBUG; 21 | } 22 | 23 | @Override 24 | protected List getPackages() { 25 | @SuppressWarnings("UnnecessaryLocalVariable") 26 | List packages = new PackageList(this).getPackages(); 27 | // Packages that cannot be autolinked yet can be added manually here, for example: 28 | // packages.add(new MyReactNativePackage()); 29 | return packages; 30 | } 31 | 32 | @Override 33 | protected String getJSMainModuleName() { 34 | return "index"; 35 | } 36 | }; 37 | 38 | @Override 39 | public ReactNativeHost getReactNativeHost() { 40 | return mReactNativeHost; 41 | } 42 | 43 | @Override 44 | public void onCreate() { 45 | super.onCreate(); 46 | SoLoader.init(this, /* native exopackage */ false); 47 | initializeFlipper(this); // Remove this line if you don't want Flipper enabled 48 | } 49 | 50 | /** 51 | * Loads Flipper in React Native templates. 52 | * 53 | * @param context 54 | */ 55 | private static void initializeFlipper(Context context) { 56 | if (BuildConfig.DEBUG) { 57 | try { 58 | /* 59 | We use reflection here to pick up the class that initializes Flipper, 60 | since Flipper library is not available in release mode 61 | */ 62 | Class aClass = Class.forName("com.facebook.flipper.ReactNativeFlipper"); 63 | aClass.getMethod("initializeFlipper", Context.class).invoke(null, context); 64 | } catch (ClassNotFoundException e) { 65 | e.printStackTrace(); 66 | } catch (NoSuchMethodException e) { 67 | e.printStackTrace(); 68 | } catch (IllegalAccessException e) { 69 | e.printStackTrace(); 70 | } catch (InvocationTargetException e) { 71 | e.printStackTrace(); 72 | } 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoStateFooter.m 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/6/13. 6 | // Copyright © 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoStateFooter.h" 10 | 11 | @interface MJRefreshAutoStateFooter() 12 | { 13 | /** 显示刷新状态的label */ 14 | __unsafe_unretained UILabel *_stateLabel; 15 | } 16 | /** 所有状态对应的文字 */ 17 | @property (strong, nonatomic) NSMutableDictionary *stateTitles; 18 | @end 19 | 20 | @implementation MJRefreshAutoStateFooter 21 | #pragma mark - 懒加载 22 | - (NSMutableDictionary *)stateTitles 23 | { 24 | if (!_stateTitles) { 25 | self.stateTitles = [NSMutableDictionary dictionary]; 26 | } 27 | return _stateTitles; 28 | } 29 | 30 | - (UILabel *)stateLabel 31 | { 32 | if (!_stateLabel) { 33 | [self addSubview:_stateLabel = [UILabel mj_label]]; 34 | } 35 | return _stateLabel; 36 | } 37 | 38 | #pragma mark - 公共方法 39 | - (void)setTitle:(NSString *)title forState:(MJRefreshState)state 40 | { 41 | if (title == nil) return; 42 | self.stateTitles[@(state)] = title; 43 | self.stateLabel.text = self.stateTitles[@(self.state)]; 44 | } 45 | 46 | #pragma mark - 私有方法 47 | - (void)stateLabelClick 48 | { 49 | if (self.state == MJRefreshStateIdle) { 50 | [self beginRefreshing]; 51 | } 52 | } 53 | 54 | #pragma mark - 重写父类的方法 55 | - (void)prepare 56 | { 57 | [super prepare]; 58 | 59 | // 初始化间距 60 | self.labelLeftInset = MJRefreshLabelLeftInset; 61 | 62 | // 初始化文字 63 | [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterIdleText] forState:MJRefreshStateIdle]; 64 | [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterRefreshingText] forState:MJRefreshStateRefreshing]; 65 | [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterNoMoreDataText] forState:MJRefreshStateNoMoreData]; 66 | 67 | // 监听label 68 | self.stateLabel.userInteractionEnabled = YES; 69 | [self.stateLabel addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(stateLabelClick)]]; 70 | } 71 | 72 | - (void)placeSubviews 73 | { 74 | [super placeSubviews]; 75 | 76 | if (self.stateLabel.constraints.count) return; 77 | 78 | // 状态标签 79 | self.stateLabel.frame = self.bounds; 80 | } 81 | 82 | - (void)setState:(MJRefreshState)state 83 | { 84 | MJRefreshCheckState 85 | 86 | if (self.isRefreshingTitleHidden && state == MJRefreshStateRefreshing) { 87 | self.stateLabel.text = nil; 88 | } else { 89 | self.stateLabel.text = self.stateTitles[@(state)]; 90 | } 91 | } 92 | @end 93 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/NSBundle+MJRefresh.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSBundle+MJRefresh.m 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 16/6/13. 6 | // Copyright © 2016年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "NSBundle+MJRefresh.h" 10 | #import "MJRefreshComponent.h" 11 | #import "MJRefreshConfig.h" 12 | 13 | @implementation NSBundle (MJRefresh) 14 | + (instancetype)mj_refreshBundle 15 | { 16 | static NSBundle *refreshBundle = nil; 17 | if (refreshBundle == nil) { 18 | // 这里不使用mainBundle是为了适配pod 1.x和0.x 19 | refreshBundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[MJRefreshComponent class]] pathForResource:@"MJRefresh" ofType:@"bundle"]]; 20 | } 21 | return refreshBundle; 22 | } 23 | 24 | + (UIImage *)mj_arrowImage 25 | { 26 | static UIImage *arrowImage = nil; 27 | if (arrowImage == nil) { 28 | arrowImage = [[UIImage imageWithContentsOfFile:[[self mj_refreshBundle] pathForResource:@"arrow@2x" ofType:@"png"]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 29 | } 30 | return arrowImage; 31 | } 32 | 33 | + (NSString *)mj_localizedStringForKey:(NSString *)key 34 | { 35 | return [self mj_localizedStringForKey:key value:nil]; 36 | } 37 | 38 | + (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value 39 | { 40 | static NSBundle *bundle = nil; 41 | if (bundle == nil) { 42 | NSString *language = MJRefreshConfig.defaultConfig.languageCode; 43 | // 如果配置中没有配置语言 44 | if (!language) { 45 | // (iOS获取的语言字符串比较不稳定)目前框架只处理en、zh-Hans、zh-Hant三种情况,其他按照系统默认处理 46 | language = [NSLocale preferredLanguages].firstObject; 47 | } 48 | 49 | if ([language hasPrefix:@"en"]) { 50 | language = @"en"; 51 | } else if ([language hasPrefix:@"zh"]) { 52 | if ([language rangeOfString:@"Hans"].location != NSNotFound) { 53 | language = @"zh-Hans"; // 简体中文 54 | } else { // zh-Hant\zh-HK\zh-TW 55 | language = @"zh-Hant"; // 繁體中文 56 | } 57 | } else if ([language hasPrefix:@"ko"]) { 58 | language = @"ko"; 59 | } else if ([language hasPrefix:@"ru"]) { 60 | language = @"ru"; 61 | } else if ([language hasPrefix:@"uk"]) { 62 | language = @"uk"; 63 | } else { 64 | language = @"en"; 65 | } 66 | 67 | // 从MJRefresh.bundle中查找资源 68 | bundle = [NSBundle bundleWithPath:[[NSBundle mj_refreshBundle] pathForResource:language ofType:@"lproj"]]; 69 | } 70 | value = [bundle localizedStringForKey:key value:value table:nil]; 71 | return [[NSBundle mainBundle] localizedStringForKey:key value:value table:nil]; 72 | } 73 | @end 74 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/MJRefreshConst.h: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: 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 3 | #import 4 | #import 5 | 6 | // 弱引用 7 | #define MJWeakSelf __weak typeof(self) weakSelf = self; 8 | 9 | // 日志输出 10 | #ifdef DEBUG 11 | #define MJRefreshLog(...) NSLog(__VA_ARGS__) 12 | #else 13 | #define MJRefreshLog(...) 14 | #endif 15 | 16 | // 过期提醒 17 | #define MJRefreshDeprecated(DESCRIPTION) __attribute__((deprecated(DESCRIPTION))) 18 | 19 | // 运行时objc_msgSend 20 | #define MJRefreshMsgSend(...) ((void (*)(void *, SEL, UIView *))objc_msgSend)(__VA_ARGS__) 21 | #define MJRefreshMsgTarget(target) (__bridge void *)(target) 22 | 23 | // RGB颜色 24 | #define MJRefreshColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0] 25 | 26 | // 文字颜色 27 | #define MJRefreshLabelTextColor MJRefreshColor(90, 90, 90) 28 | 29 | // 字体大小 30 | #define MJRefreshLabelFont [UIFont boldSystemFontOfSize:14] 31 | 32 | // 常量 33 | UIKIT_EXTERN const CGFloat MJRefreshLabelLeftInset; 34 | UIKIT_EXTERN const CGFloat MJRefreshHeaderHeight; 35 | UIKIT_EXTERN const CGFloat MJRefreshFooterHeight; 36 | UIKIT_EXTERN const CGFloat MJRefreshFastAnimationDuration; 37 | UIKIT_EXTERN const CGFloat MJRefreshSlowAnimationDuration; 38 | 39 | UIKIT_EXTERN NSString *const MJRefreshKeyPathContentOffset; 40 | UIKIT_EXTERN NSString *const MJRefreshKeyPathContentSize; 41 | UIKIT_EXTERN NSString *const MJRefreshKeyPathContentInset; 42 | UIKIT_EXTERN NSString *const MJRefreshKeyPathPanState; 43 | 44 | UIKIT_EXTERN NSString *const MJRefreshHeaderLastUpdatedTimeKey; 45 | 46 | UIKIT_EXTERN NSString *const MJRefreshHeaderIdleText; 47 | UIKIT_EXTERN NSString *const MJRefreshHeaderPullingText; 48 | UIKIT_EXTERN NSString *const MJRefreshHeaderRefreshingText; 49 | 50 | UIKIT_EXTERN NSString *const MJRefreshAutoFooterIdleText; 51 | UIKIT_EXTERN NSString *const MJRefreshAutoFooterRefreshingText; 52 | UIKIT_EXTERN NSString *const MJRefreshAutoFooterNoMoreDataText; 53 | 54 | UIKIT_EXTERN NSString *const MJRefreshBackFooterIdleText; 55 | UIKIT_EXTERN NSString *const MJRefreshBackFooterPullingText; 56 | UIKIT_EXTERN NSString *const MJRefreshBackFooterRefreshingText; 57 | UIKIT_EXTERN NSString *const MJRefreshBackFooterNoMoreDataText; 58 | 59 | UIKIT_EXTERN NSString *const MJRefreshHeaderLastTimeText; 60 | UIKIT_EXTERN NSString *const MJRefreshHeaderDateTodayText; 61 | UIKIT_EXTERN NSString *const MJRefreshHeaderNoneLastDateText; 62 | 63 | // 状态检查 64 | #define MJRefreshCheckState \ 65 | MJRefreshState oldState = self.state; \ 66 | if (state == oldState) return; \ 67 | [super setState:state]; 68 | 69 | // 异步主线程执行,不强持有Self 70 | #define MJRefreshDispatchAsyncOnMainQueue(x) \ 71 | __weak typeof(self) weakSelf = self; \ 72 | dispatch_async(dispatch_get_main_queue(), ^{ \ 73 | typeof(weakSelf) self = weakSelf; \ 74 | {x} \ 75 | }); 76 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: 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 3 | // UIScrollView+MJRefresh.m 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 15/3/4. 7 | // Copyright (c) 2015年 小码哥. All rights reserved. 8 | // 9 | 10 | #import "UIScrollView+MJRefresh.h" 11 | #import "MJRefreshHeader.h" 12 | #import "MJRefreshFooter.h" 13 | #import 14 | 15 | @implementation UIScrollView (MJRefresh) 16 | 17 | #pragma mark - header 18 | static const char MJRefreshHeaderKey = '\0'; 19 | - (void)setMj_header:(MJRefreshHeader *)mj_header 20 | { 21 | if (mj_header != self.mj_header) { 22 | // 删除旧的,添加新的 23 | [self.mj_header removeFromSuperview]; 24 | [self insertSubview:mj_header atIndex:0]; 25 | 26 | // 存储新的 27 | objc_setAssociatedObject(self, &MJRefreshHeaderKey, 28 | mj_header, OBJC_ASSOCIATION_RETAIN); 29 | } 30 | } 31 | 32 | - (MJRefreshHeader *)mj_header 33 | { 34 | return objc_getAssociatedObject(self, &MJRefreshHeaderKey); 35 | } 36 | 37 | #pragma mark - footer 38 | static const char MJRefreshFooterKey = '\0'; 39 | - (void)setMj_footer:(MJRefreshFooter *)mj_footer 40 | { 41 | if (mj_footer != self.mj_footer) { 42 | // 删除旧的,添加新的 43 | [self.mj_footer removeFromSuperview]; 44 | [self insertSubview:mj_footer atIndex:0]; 45 | 46 | // 存储新的 47 | objc_setAssociatedObject(self, &MJRefreshFooterKey, 48 | mj_footer, OBJC_ASSOCIATION_RETAIN); 49 | } 50 | } 51 | 52 | - (MJRefreshFooter *)mj_footer 53 | { 54 | return objc_getAssociatedObject(self, &MJRefreshFooterKey); 55 | } 56 | 57 | #pragma mark - 过期 58 | - (void)setFooter:(MJRefreshFooter *)footer 59 | { 60 | self.mj_footer = footer; 61 | } 62 | 63 | - (MJRefreshFooter *)footer 64 | { 65 | return self.mj_footer; 66 | } 67 | 68 | - (void)setHeader:(MJRefreshHeader *)header 69 | { 70 | self.mj_header = header; 71 | } 72 | 73 | - (MJRefreshHeader *)header 74 | { 75 | return self.mj_header; 76 | } 77 | 78 | #pragma mark - other 79 | - (NSInteger)mj_totalDataCount 80 | { 81 | NSInteger totalCount = 0; 82 | if ([self isKindOfClass:[UITableView class]]) { 83 | UITableView *tableView = (UITableView *)self; 84 | 85 | for (NSInteger section = 0; section < tableView.numberOfSections; section++) { 86 | totalCount += [tableView numberOfRowsInSection:section]; 87 | } 88 | } else if ([self isKindOfClass:[UICollectionView class]]) { 89 | UICollectionView *collectionView = (UICollectionView *)self; 90 | 91 | for (NSInteger section = 0; section < collectionView.numberOfSections; section++) { 92 | totalCount += [collectionView numberOfItemsInSection:section]; 93 | } 94 | } 95 | return totalCount; 96 | } 97 | 98 | @end 99 | -------------------------------------------------------------------------------- /example/ios/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '9.0' 2 | require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' 3 | 4 | target 'example' do 5 | # Pods for example 6 | pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector" 7 | pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec" 8 | pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired" 9 | pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety" 10 | pod 'React', :path => '../node_modules/react-native/' 11 | pod 'React-Core', :path => '../node_modules/react-native/' 12 | pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules' 13 | pod 'React-Core/DevSupport', :path => '../node_modules/react-native/' 14 | pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS' 15 | pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation' 16 | pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob' 17 | pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image' 18 | pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS' 19 | pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network' 20 | pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings' 21 | pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text' 22 | pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration' 23 | pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/' 24 | 25 | pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact' 26 | pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi' 27 | pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor' 28 | pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector' 29 | pod 'ReactCommon/jscallinvoker', :path => "../node_modules/react-native/ReactCommon" 30 | pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon" 31 | pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga' 32 | 33 | pod 'boost-for-react-native', :git => 'https://gitee.com/damon-s/boost-for-react-native.git' 34 | pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec' 35 | pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec' 36 | pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' 37 | 38 | pod 'MJRefresh', '~> 3.4.0' 39 | 40 | pod 'react-native-webview', :path => '../node_modules/react-native-webview' 41 | 42 | target 'exampleTests' do 43 | inherit! :search_paths 44 | # Pods for testing 45 | end 46 | 47 | use_native_modules! 48 | end 49 | 50 | target 'example-tvOS' do 51 | # Pods for example-tvOS 52 | 53 | target 'example-tvOSTests' do 54 | inherit! :search_paths 55 | # Pods for testing 56 | end 57 | 58 | end 59 | -------------------------------------------------------------------------------- /example/src/screen/webViewScreen.js: -------------------------------------------------------------------------------- 1 | /** 2 | * WebViewScreen 3 | * 4 | * opu 5 | * 19年10月9日 6 | */ 7 | import React, {Component} from 'react'; 8 | import {WebView, StyleSheet, View} from 'react-native'; 9 | 10 | import WKWebView from 'react-native-webview'; 11 | 12 | export default class WebViewDemoContainer extends Component { 13 | static navigationOptions = ({navigation}) => { 14 | return { 15 | title: navigation.getParam('title', '效果'), 16 | }; 17 | }; 18 | // 构造函数 19 | constructor(props) { 20 | super(props); 21 | this.state = { 22 | enableRefresh: true, 23 | refreshing: false, 24 | }; 25 | this.webview = React.createRef(); 26 | } 27 | componentDidMount() {} 28 | loadData = (data) => { 29 | this.setState({ 30 | refreshing: true, 31 | }); 32 | this.webview.reload(); 33 | // 做其他额外的操作... 34 | }; 35 | onError = () => { 36 | this.setState({ 37 | refreshing: false, 38 | }); 39 | }; 40 | onLoad = () => { 41 | console.log('网页开始加载中'); 42 | }; 43 | onLoadEnd = () => { 44 | this.setState({ 45 | refreshing: false, 46 | }); 47 | console.log('网页加载完毕'); 48 | }; 49 | // 渲染组件 50 | render() { 51 | let webType = this.props.navigation.getParam('webType'); 52 | // let {refreshing} = this.state; 53 | return ( 54 | 55 | {webType === 'UIWebView' ? ( 56 | // RN提供的WebView 57 | 78 | ) : ( 79 | // react-native-webview提供的WKWebView 80 | 96 | )} 97 | 98 | ); 99 | } 100 | } 101 | // 样式 102 | const styles = StyleSheet.create({ 103 | container: { 104 | flex: 1, 105 | backgroundColor: '#f5f9fa', 106 | }, 107 | }); 108 | -------------------------------------------------------------------------------- /example/android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem http://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 33 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 34 | 35 | @rem Find java.exe 36 | if defined JAVA_HOME goto findJavaFromJavaHome 37 | 38 | set JAVA_EXE=java.exe 39 | %JAVA_EXE% -version >NUL 2>&1 40 | if "%ERRORLEVEL%" == "0" goto init 41 | 42 | echo. 43 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 44 | echo. 45 | echo Please set the JAVA_HOME variable in your environment to match the 46 | echo location of your Java installation. 47 | 48 | goto fail 49 | 50 | :findJavaFromJavaHome 51 | set JAVA_HOME=%JAVA_HOME:"=% 52 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 53 | 54 | if exist "%JAVA_EXE%" goto init 55 | 56 | echo. 57 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 58 | echo. 59 | echo Please set the JAVA_HOME variable in your environment to match the 60 | echo location of your Java installation. 61 | 62 | goto fail 63 | 64 | :init 65 | @rem Get command-line arguments, handling Windows variants 66 | 67 | if not "%OS%" == "Windows_NT" goto win9xME_args 68 | 69 | :win9xME_args 70 | @rem Slurp the command line arguments. 71 | set CMD_LINE_ARGS= 72 | set _SKIP=2 73 | 74 | :win9xME_args_slurp 75 | if "x%~1" == "x" goto execute 76 | 77 | set CMD_LINE_ARGS=%* 78 | 79 | :execute 80 | @rem Setup the command line 81 | 82 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 83 | 84 | @rem Execute Gradle 85 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 86 | 87 | :end 88 | @rem End local scope for the variables with windows NT shell 89 | if "%ERRORLEVEL%"=="0" goto mainEnd 90 | 91 | :fail 92 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 93 | rem the _cmd.exe /c_ return code! 94 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 95 | exit /b 1 96 | 97 | :mainEnd 98 | if "%OS%"=="Windows_NT" endlocal 99 | 100 | :omega 101 | -------------------------------------------------------------------------------- /example/ios/Pods/Target Support Files/Pods-example/Pods-example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DoubleConversion" "${PODS_ROOT}/Headers/Public/FBLazyVector" "${PODS_ROOT}/Headers/Public/FBReactNativeSpec" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RCTRequired" "${PODS_ROOT}/Headers/Public/RCTTypeSafety" "${PODS_ROOT}/Headers/Public/RNCMaskedView" "${PODS_ROOT}/Headers/Public/RNGestureHandler" "${PODS_ROOT}/Headers/Public/RNReanimated" "${PODS_ROOT}/Headers/Public/RNScreens" "${PODS_ROOT}/Headers/Public/React-Core" "${PODS_ROOT}/Headers/Public/React-RCTBlob" "${PODS_ROOT}/Headers/Public/React-RCTText" "${PODS_ROOT}/Headers/Public/React-cxxreact" "${PODS_ROOT}/Headers/Public/React-jsi" "${PODS_ROOT}/Headers/Public/React-jsiexecutor" "${PODS_ROOT}/Headers/Public/React-jsinspector" "${PODS_ROOT}/Headers/Public/ReactCommon" "${PODS_ROOT}/Headers/Public/Yoga" "${PODS_ROOT}/Headers/Public/glog" "${PODS_ROOT}/Headers/Public/react-native-safe-area-context" "${PODS_ROOT}/Headers/Public/react-native-webview" "$(PODS_ROOT)/Headers/Private/React-Core" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DoubleConversion" "${PODS_CONFIGURATION_BUILD_DIR}/FBReactNativeSpec" "${PODS_CONFIGURATION_BUILD_DIR}/Folly" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/RCTTypeSafety" "${PODS_CONFIGURATION_BUILD_DIR}/RNCMaskedView" "${PODS_CONFIGURATION_BUILD_DIR}/RNGestureHandler" "${PODS_CONFIGURATION_BUILD_DIR}/RNReanimated" "${PODS_CONFIGURATION_BUILD_DIR}/RNScreens" "${PODS_CONFIGURATION_BUILD_DIR}/React-Core" "${PODS_CONFIGURATION_BUILD_DIR}/React-CoreModules" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTActionSheet" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAnimation" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTBlob" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTImage" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTLinking" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTNetwork" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTSettings" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTText" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTVibration" "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact" "${PODS_CONFIGURATION_BUILD_DIR}/React-jsi" "${PODS_CONFIGURATION_BUILD_DIR}/React-jsiexecutor" "${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector" "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon" "${PODS_CONFIGURATION_BUILD_DIR}/Yoga" "${PODS_CONFIGURATION_BUILD_DIR}/glog" "${PODS_CONFIGURATION_BUILD_DIR}/react-native-safe-area-context" "${PODS_CONFIGURATION_BUILD_DIR}/react-native-webview" 4 | OTHER_LDFLAGS = $(inherited) -ObjC -l"DoubleConversion" -l"FBReactNativeSpec" -l"Folly" -l"MJRefresh" -l"RCTTypeSafety" -l"RNCMaskedView" -l"RNGestureHandler" -l"RNReanimated" -l"RNScreens" -l"React-Core" -l"React-CoreModules" -l"React-RCTActionSheet" -l"React-RCTAnimation" -l"React-RCTBlob" -l"React-RCTImage" -l"React-RCTLinking" -l"React-RCTNetwork" -l"React-RCTSettings" -l"React-RCTText" -l"React-RCTVibration" -l"React-cxxreact" -l"React-jsi" -l"React-jsiexecutor" -l"React-jsinspector" -l"ReactCommon" -l"Yoga" -l"glog" -l"react-native-safe-area-context" -l"react-native-webview" -l"stdc++" -framework "JavaScriptCore" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 10 | -------------------------------------------------------------------------------- /example/ios/Pods/Target Support Files/Pods-example/Pods-example.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/DoubleConversion" "${PODS_ROOT}/Headers/Public/FBLazyVector" "${PODS_ROOT}/Headers/Public/FBReactNativeSpec" "${PODS_ROOT}/Headers/Public/MJRefresh" "${PODS_ROOT}/Headers/Public/RCTRequired" "${PODS_ROOT}/Headers/Public/RCTTypeSafety" "${PODS_ROOT}/Headers/Public/RNCMaskedView" "${PODS_ROOT}/Headers/Public/RNGestureHandler" "${PODS_ROOT}/Headers/Public/RNReanimated" "${PODS_ROOT}/Headers/Public/RNScreens" "${PODS_ROOT}/Headers/Public/React-Core" "${PODS_ROOT}/Headers/Public/React-RCTBlob" "${PODS_ROOT}/Headers/Public/React-RCTText" "${PODS_ROOT}/Headers/Public/React-cxxreact" "${PODS_ROOT}/Headers/Public/React-jsi" "${PODS_ROOT}/Headers/Public/React-jsiexecutor" "${PODS_ROOT}/Headers/Public/React-jsinspector" "${PODS_ROOT}/Headers/Public/ReactCommon" "${PODS_ROOT}/Headers/Public/Yoga" "${PODS_ROOT}/Headers/Public/glog" "${PODS_ROOT}/Headers/Public/react-native-safe-area-context" "${PODS_ROOT}/Headers/Public/react-native-webview" "$(PODS_ROOT)/Headers/Private/React-Core" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/DoubleConversion" "${PODS_CONFIGURATION_BUILD_DIR}/FBReactNativeSpec" "${PODS_CONFIGURATION_BUILD_DIR}/Folly" "${PODS_CONFIGURATION_BUILD_DIR}/MJRefresh" "${PODS_CONFIGURATION_BUILD_DIR}/RCTTypeSafety" "${PODS_CONFIGURATION_BUILD_DIR}/RNCMaskedView" "${PODS_CONFIGURATION_BUILD_DIR}/RNGestureHandler" "${PODS_CONFIGURATION_BUILD_DIR}/RNReanimated" "${PODS_CONFIGURATION_BUILD_DIR}/RNScreens" "${PODS_CONFIGURATION_BUILD_DIR}/React-Core" "${PODS_CONFIGURATION_BUILD_DIR}/React-CoreModules" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTActionSheet" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTAnimation" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTBlob" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTImage" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTLinking" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTNetwork" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTSettings" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTText" "${PODS_CONFIGURATION_BUILD_DIR}/React-RCTVibration" "${PODS_CONFIGURATION_BUILD_DIR}/React-cxxreact" "${PODS_CONFIGURATION_BUILD_DIR}/React-jsi" "${PODS_CONFIGURATION_BUILD_DIR}/React-jsiexecutor" "${PODS_CONFIGURATION_BUILD_DIR}/React-jsinspector" "${PODS_CONFIGURATION_BUILD_DIR}/ReactCommon" "${PODS_CONFIGURATION_BUILD_DIR}/Yoga" "${PODS_CONFIGURATION_BUILD_DIR}/glog" "${PODS_CONFIGURATION_BUILD_DIR}/react-native-safe-area-context" "${PODS_CONFIGURATION_BUILD_DIR}/react-native-webview" 4 | OTHER_LDFLAGS = $(inherited) -ObjC -l"DoubleConversion" -l"FBReactNativeSpec" -l"Folly" -l"MJRefresh" -l"RCTTypeSafety" -l"RNCMaskedView" -l"RNGestureHandler" -l"RNReanimated" -l"RNScreens" -l"React-Core" -l"React-CoreModules" -l"React-RCTActionSheet" -l"React-RCTAnimation" -l"React-RCTBlob" -l"React-RCTImage" -l"React-RCTLinking" -l"React-RCTNetwork" -l"React-RCTSettings" -l"React-RCTText" -l"React-RCTVibration" -l"React-cxxreact" -l"React-jsi" -l"React-jsiexecutor" -l"React-jsinspector" -l"ReactCommon" -l"Yoga" -l"glog" -l"react-native-safe-area-context" -l"react-native-webview" -l"stdc++" -framework "JavaScriptCore" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 10 | -------------------------------------------------------------------------------- /example/src/screen/listDemoScreen.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable react-native/no-inline-styles */ 2 | /** 3 | * listDemoScreen 4 | * 5 | * opu 6 | * 19年10月9日 7 | */ 8 | import React, {Component} from 'react'; 9 | import {FlatList, Text, StyleSheet, View} from 'react-native'; 10 | 11 | export default class ListViewDemoContianer extends Component { 12 | static navigationOptions = ({navigation}) => { 13 | return { 14 | title: navigation.getParam('title', '效果'), 15 | }; 16 | }; 17 | // 构造函数 18 | constructor(props) { 19 | super(props); 20 | this.state = { 21 | enableRefresh: true, 22 | refreshing: false, 23 | 24 | enableLoadMore: false, 25 | loadingMore: false, 26 | isLoadAll: false, 27 | list: [], 28 | }; 29 | } 30 | componentDidMount() { 31 | // 加载数据 32 | this.loadDataList(); 33 | } 34 | loadDataList = () => { 35 | console.log('调用了请求方法'); 36 | this.setState({ 37 | refreshing: true, 38 | }); 39 | // 网络请求 40 | setTimeout(() => { 41 | let count = Math.floor(Math.random() * 10) + 4; 42 | let arr = []; 43 | for (let i = 0; i < count; i++) { 44 | arr.push(`随机数据${Math.floor(Math.random() * 10000)}`); 45 | } 46 | this.setState({ 47 | refreshing: false, 48 | list: arr, 49 | enableLoadMore: true, 50 | isLoadAll: arr.length > 18, 51 | }); 52 | console.log('刷新结束:'); 53 | }, 1000); 54 | }; 55 | loadMoreData = () => { 56 | this.setState({ 57 | loadingMore: true, 58 | }); 59 | // 网络请求 60 | setTimeout(() => { 61 | let count = Math.floor(Math.random() * 10) + 5; 62 | let arr = []; 63 | for (let i = 0; i < count; i++) { 64 | arr.push(`随机数据${Math.floor(Math.random() * 10000)}`); 65 | } 66 | let newlist = this.state.list.concat(arr); 67 | this.setState({ 68 | loadingMore: false, 69 | list: newlist, 70 | isLoadAll: newlist.length > 20, 71 | }); 72 | console.log('加载更多结束:'); 73 | }, 600); 74 | }; 75 | // 渲染组件 76 | render() { 77 | return ( 78 | '' + index + item} 82 | renderItem={({item, index}) => { 83 | return ( 84 | 92 | {item} 93 | 94 | ); 95 | }} 96 | enableMJRefresh={true} 97 | mjRefreshing={this.state.refreshing} 98 | onMJRefresh={this.loadDataList} 99 | mjHeaderStyle={this.props.navigation.getParam('headerStyles')} 100 | enableMJLoadMore={this.state.enableLoadMore} 101 | mjLoadingMore={this.state.loadingMore} 102 | mjLoadAll={this.state.isLoadAll} 103 | onMJLoadMore={this.loadMoreData} 104 | mjFooterStyle={this.props.navigation.getParam('footerStyles')} 105 | /> 106 | ); 107 | } 108 | } 109 | 110 | const styles = StyleSheet.create({ 111 | listview: { 112 | flex: 1, 113 | backgroundColor: '#f5f9fa', 114 | }, 115 | }); 116 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshAutoGifFooter.m 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshAutoGifFooter.h" 10 | 11 | @interface MJRefreshAutoGifFooter() 12 | { 13 | __unsafe_unretained UIImageView *_gifView; 14 | } 15 | /** 所有状态对应的动画图片 */ 16 | @property (strong, nonatomic) NSMutableDictionary *stateImages; 17 | /** 所有状态对应的动画时间 */ 18 | @property (strong, nonatomic) NSMutableDictionary *stateDurations; 19 | @end 20 | 21 | @implementation MJRefreshAutoGifFooter 22 | #pragma mark - 懒加载 23 | - (UIImageView *)gifView 24 | { 25 | if (!_gifView) { 26 | UIImageView *gifView = [[UIImageView alloc] init]; 27 | [self addSubview:_gifView = gifView]; 28 | } 29 | return _gifView; 30 | } 31 | 32 | - (NSMutableDictionary *)stateImages 33 | { 34 | if (!_stateImages) { 35 | self.stateImages = [NSMutableDictionary dictionary]; 36 | } 37 | return _stateImages; 38 | } 39 | 40 | - (NSMutableDictionary *)stateDurations 41 | { 42 | if (!_stateDurations) { 43 | self.stateDurations = [NSMutableDictionary dictionary]; 44 | } 45 | return _stateDurations; 46 | } 47 | 48 | #pragma mark - 公共方法 49 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state 50 | { 51 | if (images == nil) return; 52 | 53 | self.stateImages[@(state)] = images; 54 | self.stateDurations[@(state)] = @(duration); 55 | 56 | /* 根据图片设置控件的高度 */ 57 | UIImage *image = [images firstObject]; 58 | if (image.size.height > self.mj_h) { 59 | self.mj_h = image.size.height; 60 | } 61 | } 62 | 63 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state 64 | { 65 | [self setImages:images duration:images.count * 0.1 forState:state]; 66 | } 67 | 68 | #pragma mark - 实现父类的方法 69 | - (void)prepare 70 | { 71 | [super prepare]; 72 | 73 | // 初始化间距 74 | self.labelLeftInset = 20; 75 | } 76 | 77 | - (void)placeSubviews 78 | { 79 | [super placeSubviews]; 80 | 81 | if (self.gifView.constraints.count) return; 82 | 83 | self.gifView.frame = self.bounds; 84 | if (self.isRefreshingTitleHidden) { 85 | self.gifView.contentMode = UIViewContentModeCenter; 86 | } else { 87 | self.gifView.contentMode = UIViewContentModeRight; 88 | self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWidth * 0.5; 89 | } 90 | } 91 | 92 | - (void)setState:(MJRefreshState)state 93 | { 94 | MJRefreshCheckState 95 | 96 | // 根据状态做事情 97 | if (state == MJRefreshStateRefreshing) { 98 | NSArray *images = self.stateImages[@(state)]; 99 | if (images.count == 0) return; 100 | [self.gifView stopAnimating]; 101 | 102 | self.gifView.hidden = NO; 103 | if (images.count == 1) { // 单张图片 104 | self.gifView.image = [images lastObject]; 105 | } else { // 多张图片 106 | self.gifView.animationImages = images; 107 | self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; 108 | [self.gifView startAnimating]; 109 | } 110 | } else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) { 111 | [self.gifView stopAnimating]; 112 | self.gifView.hidden = YES; 113 | } 114 | } 115 | @end 116 | 117 | -------------------------------------------------------------------------------- /example/App.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Sample React Native App 3 | * https://github.com/facebook/react-native 4 | * 5 | * @format 6 | * @flow 7 | */ 8 | 9 | import React, {Component} from 'react'; 10 | import { 11 | SafeAreaView, 12 | StyleSheet, 13 | ScrollView, 14 | View, 15 | Text, 16 | StatusBar, 17 | } from 'react-native'; 18 | 19 | import 'react-native-gesture-handler'; 20 | import AppStackNavigator from './src/router/mainStackRouter'; 21 | import {createAppContainer} from 'react-navigation'; 22 | export default createAppContainer(AppStackNavigator); 23 | 24 | // import { 25 | // Header, 26 | // LearnMoreLinks, 27 | // Colors, 28 | // DebugInstructions, 29 | // ReloadInstructions, 30 | // } from 'react-native/Libraries/NewAppScreen'; 31 | 32 | // const App: () => React$Node = () => { 33 | // return ( 34 | // <> 35 | // 36 | // 37 | // 40 | //
41 | // {global.HermesInternal == null ? null : ( 42 | // 43 | // Engine: Hermes 44 | // 45 | // )} 46 | // 47 | // 48 | // Step One 49 | // 50 | // Edit App.js to change this 51 | // screen and then come back to see your edits. 52 | // 53 | // 54 | // 55 | // See Your Changes 56 | // 57 | // 58 | // 59 | // 60 | // 61 | // Debug 62 | // 63 | // 64 | // 65 | // 66 | // 67 | // Learn More 68 | // 69 | // Read the docs to discover what to do next: 70 | // 71 | // 72 | // 73 | // 74 | // 75 | // 76 | // 77 | // ); 78 | // }; 79 | 80 | // const styles = StyleSheet.create({ 81 | // scrollView: { 82 | // backgroundColor: Colors.lighter, 83 | // }, 84 | // engine: { 85 | // position: 'absolute', 86 | // right: 0, 87 | // }, 88 | // body: { 89 | // backgroundColor: Colors.white, 90 | // }, 91 | // sectionContainer: { 92 | // marginTop: 32, 93 | // paddingHorizontal: 24, 94 | // }, 95 | // sectionTitle: { 96 | // fontSize: 24, 97 | // fontWeight: '600', 98 | // color: Colors.black, 99 | // }, 100 | // sectionDescription: { 101 | // marginTop: 8, 102 | // fontSize: 18, 103 | // fontWeight: '400', 104 | // color: Colors.dark, 105 | // }, 106 | // highlight: { 107 | // fontWeight: '700', 108 | // }, 109 | // footer: { 110 | // color: Colors.dark, 111 | // fontSize: 12, 112 | // fontWeight: '600', 113 | // padding: 4, 114 | // paddingRight: 12, 115 | // textAlign: 'right', 116 | // }, 117 | // }); 118 | 119 | // export default App; 120 | -------------------------------------------------------------------------------- /example/ios/example/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 22 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshBackGifFooter.m 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshBackGifFooter.h" 10 | 11 | @interface MJRefreshBackGifFooter() 12 | { 13 | __unsafe_unretained UIImageView *_gifView; 14 | } 15 | /** 所有状态对应的动画图片 */ 16 | @property (strong, nonatomic) NSMutableDictionary *stateImages; 17 | /** 所有状态对应的动画时间 */ 18 | @property (strong, nonatomic) NSMutableDictionary *stateDurations; 19 | @end 20 | 21 | @implementation MJRefreshBackGifFooter 22 | #pragma mark - 懒加载 23 | - (UIImageView *)gifView 24 | { 25 | if (!_gifView) { 26 | UIImageView *gifView = [[UIImageView alloc] init]; 27 | [self addSubview:_gifView = gifView]; 28 | } 29 | return _gifView; 30 | } 31 | 32 | - (NSMutableDictionary *)stateImages 33 | { 34 | if (!_stateImages) { 35 | self.stateImages = [NSMutableDictionary dictionary]; 36 | } 37 | return _stateImages; 38 | } 39 | 40 | - (NSMutableDictionary *)stateDurations 41 | { 42 | if (!_stateDurations) { 43 | self.stateDurations = [NSMutableDictionary dictionary]; 44 | } 45 | return _stateDurations; 46 | } 47 | 48 | #pragma mark - 公共方法 49 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state 50 | { 51 | if (images == nil) return; 52 | 53 | self.stateImages[@(state)] = images; 54 | self.stateDurations[@(state)] = @(duration); 55 | 56 | /* 根据图片设置控件的高度 */ 57 | UIImage *image = [images firstObject]; 58 | if (image.size.height > self.mj_h) { 59 | self.mj_h = image.size.height; 60 | } 61 | } 62 | 63 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state 64 | { 65 | [self setImages:images duration:images.count * 0.1 forState:state]; 66 | } 67 | 68 | #pragma mark - 实现父类的方法 69 | - (void)prepare 70 | { 71 | [super prepare]; 72 | 73 | // 初始化间距 74 | self.labelLeftInset = 20; 75 | } 76 | 77 | - (void)setPullingPercent:(CGFloat)pullingPercent 78 | { 79 | [super setPullingPercent:pullingPercent]; 80 | NSArray *images = self.stateImages[@(MJRefreshStateIdle)]; 81 | if (self.state != MJRefreshStateIdle || images.count == 0) return; 82 | [self.gifView stopAnimating]; 83 | NSUInteger index = images.count * pullingPercent; 84 | if (index >= images.count) index = images.count - 1; 85 | self.gifView.image = images[index]; 86 | } 87 | 88 | - (void)placeSubviews 89 | { 90 | [super placeSubviews]; 91 | 92 | if (self.gifView.constraints.count) return; 93 | 94 | self.gifView.frame = self.bounds; 95 | if (self.stateLabel.hidden) { 96 | self.gifView.contentMode = UIViewContentModeCenter; 97 | } else { 98 | self.gifView.contentMode = UIViewContentModeRight; 99 | self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWidth * 0.5; 100 | } 101 | } 102 | 103 | - (void)setState:(MJRefreshState)state 104 | { 105 | MJRefreshCheckState 106 | 107 | // 根据状态做事情 108 | if (state == MJRefreshStatePulling || state == MJRefreshStateRefreshing) { 109 | NSArray *images = self.stateImages[@(state)]; 110 | if (images.count == 0) return; 111 | 112 | self.gifView.hidden = NO; 113 | [self.gifView stopAnimating]; 114 | if (images.count == 1) { // 单张图片 115 | self.gifView.image = [images lastObject]; 116 | } else { // 多张图片 117 | self.gifView.animationImages = images; 118 | self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; 119 | [self.gifView startAnimating]; 120 | } 121 | } else if (state == MJRefreshStateIdle) { 122 | self.gifView.hidden = NO; 123 | } else if (state == MJRefreshStateNoMoreData) { 124 | self.gifView.hidden = YES; 125 | } 126 | } 127 | @end 128 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/UIScrollView+MJExtension.m: -------------------------------------------------------------------------------- 1 | // 代码地址: https://github.com/CoderMJLee/MJRefresh 2 | // 代码地址: 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 3 | // UIScrollView+Extension.m 4 | // MJRefreshExample 5 | // 6 | // Created by MJ Lee on 14-5-28. 7 | // Copyright (c) 2014年 小码哥. All rights reserved. 8 | // 9 | 10 | #import "UIScrollView+MJExtension.h" 11 | #import 12 | 13 | #pragma clang diagnostic push 14 | #pragma clang diagnostic ignored "-Wunguarded-availability-new" 15 | 16 | @implementation UIScrollView (MJExtension) 17 | 18 | static BOOL respondsToAdjustedContentInset_; 19 | 20 | + (void)initialize 21 | { 22 | static dispatch_once_t onceToken; 23 | dispatch_once(&onceToken, ^{ 24 | respondsToAdjustedContentInset_ = [self instancesRespondToSelector:@selector(adjustedContentInset)]; 25 | }); 26 | } 27 | 28 | - (UIEdgeInsets)mj_inset 29 | { 30 | #ifdef __IPHONE_11_0 31 | if (respondsToAdjustedContentInset_) { 32 | return self.adjustedContentInset; 33 | } 34 | #endif 35 | return self.contentInset; 36 | } 37 | 38 | - (void)setMj_insetT:(CGFloat)mj_insetT 39 | { 40 | UIEdgeInsets inset = self.contentInset; 41 | inset.top = mj_insetT; 42 | #ifdef __IPHONE_11_0 43 | if (respondsToAdjustedContentInset_) { 44 | inset.top -= (self.adjustedContentInset.top - self.contentInset.top); 45 | } 46 | #endif 47 | self.contentInset = inset; 48 | } 49 | 50 | - (CGFloat)mj_insetT 51 | { 52 | return self.mj_inset.top; 53 | } 54 | 55 | - (void)setMj_insetB:(CGFloat)mj_insetB 56 | { 57 | UIEdgeInsets inset = self.contentInset; 58 | inset.bottom = mj_insetB; 59 | #ifdef __IPHONE_11_0 60 | if (respondsToAdjustedContentInset_) { 61 | inset.bottom -= (self.adjustedContentInset.bottom - self.contentInset.bottom); 62 | } 63 | #endif 64 | self.contentInset = inset; 65 | } 66 | 67 | - (CGFloat)mj_insetB 68 | { 69 | return self.mj_inset.bottom; 70 | } 71 | 72 | - (void)setMj_insetL:(CGFloat)mj_insetL 73 | { 74 | UIEdgeInsets inset = self.contentInset; 75 | inset.left = mj_insetL; 76 | #ifdef __IPHONE_11_0 77 | if (respondsToAdjustedContentInset_) { 78 | inset.left -= (self.adjustedContentInset.left - self.contentInset.left); 79 | } 80 | #endif 81 | self.contentInset = inset; 82 | } 83 | 84 | - (CGFloat)mj_insetL 85 | { 86 | return self.mj_inset.left; 87 | } 88 | 89 | - (void)setMj_insetR:(CGFloat)mj_insetR 90 | { 91 | UIEdgeInsets inset = self.contentInset; 92 | inset.right = mj_insetR; 93 | #ifdef __IPHONE_11_0 94 | if (respondsToAdjustedContentInset_) { 95 | inset.right -= (self.adjustedContentInset.right - self.contentInset.right); 96 | } 97 | #endif 98 | self.contentInset = inset; 99 | } 100 | 101 | - (CGFloat)mj_insetR 102 | { 103 | return self.mj_inset.right; 104 | } 105 | 106 | - (void)setMj_offsetX:(CGFloat)mj_offsetX 107 | { 108 | CGPoint offset = self.contentOffset; 109 | offset.x = mj_offsetX; 110 | self.contentOffset = offset; 111 | } 112 | 113 | - (CGFloat)mj_offsetX 114 | { 115 | return self.contentOffset.x; 116 | } 117 | 118 | - (void)setMj_offsetY:(CGFloat)mj_offsetY 119 | { 120 | CGPoint offset = self.contentOffset; 121 | offset.y = mj_offsetY; 122 | self.contentOffset = offset; 123 | } 124 | 125 | - (CGFloat)mj_offsetY 126 | { 127 | return self.contentOffset.y; 128 | } 129 | 130 | - (void)setMj_contentW:(CGFloat)mj_contentW 131 | { 132 | CGSize size = self.contentSize; 133 | size.width = mj_contentW; 134 | self.contentSize = size; 135 | } 136 | 137 | - (CGFloat)mj_contentW 138 | { 139 | return self.contentSize.width; 140 | } 141 | 142 | - (void)setMj_contentH:(CGFloat)mj_contentH 143 | { 144 | CGSize size = self.contentSize; 145 | size.height = mj_contentH; 146 | self.contentSize = size; 147 | } 148 | 149 | - (CGFloat)mj_contentH 150 | { 151 | return self.contentSize.height; 152 | } 153 | @end 154 | #pragma clang diagnostic pop 155 | -------------------------------------------------------------------------------- /example/ios/Pods/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m: -------------------------------------------------------------------------------- 1 | // 2 | // MJRefreshGifHeader.m 3 | // MJRefreshExample 4 | // 5 | // Created by MJ Lee on 15/4/24. 6 | // Copyright (c) 2015年 小码哥. All rights reserved. 7 | // 8 | 9 | #import "MJRefreshGifHeader.h" 10 | 11 | @interface MJRefreshGifHeader() 12 | { 13 | __unsafe_unretained UIImageView *_gifView; 14 | } 15 | /** 所有状态对应的动画图片 */ 16 | @property (strong, nonatomic) NSMutableDictionary *stateImages; 17 | /** 所有状态对应的动画时间 */ 18 | @property (strong, nonatomic) NSMutableDictionary *stateDurations; 19 | @end 20 | 21 | @implementation MJRefreshGifHeader 22 | #pragma mark - 懒加载 23 | - (UIImageView *)gifView 24 | { 25 | if (!_gifView) { 26 | UIImageView *gifView = [[UIImageView alloc] init]; 27 | [self addSubview:_gifView = gifView]; 28 | } 29 | return _gifView; 30 | } 31 | 32 | - (NSMutableDictionary *)stateImages 33 | { 34 | if (!_stateImages) { 35 | self.stateImages = [NSMutableDictionary dictionary]; 36 | } 37 | return _stateImages; 38 | } 39 | 40 | - (NSMutableDictionary *)stateDurations 41 | { 42 | if (!_stateDurations) { 43 | self.stateDurations = [NSMutableDictionary dictionary]; 44 | } 45 | return _stateDurations; 46 | } 47 | 48 | #pragma mark - 公共方法 49 | - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state 50 | { 51 | if (images == nil) return; 52 | 53 | self.stateImages[@(state)] = images; 54 | self.stateDurations[@(state)] = @(duration); 55 | 56 | /* 根据图片设置控件的高度 */ 57 | UIImage *image = [images firstObject]; 58 | if (image.size.height > self.mj_h) { 59 | self.mj_h = image.size.height; 60 | } 61 | } 62 | 63 | - (void)setImages:(NSArray *)images forState:(MJRefreshState)state 64 | { 65 | [self setImages:images duration:images.count * 0.1 forState:state]; 66 | } 67 | 68 | #pragma mark - 实现父类的方法 69 | - (void)prepare 70 | { 71 | [super prepare]; 72 | 73 | // 初始化间距 74 | self.labelLeftInset = 20; 75 | } 76 | 77 | - (void)setPullingPercent:(CGFloat)pullingPercent 78 | { 79 | [super setPullingPercent:pullingPercent]; 80 | NSArray *images = self.stateImages[@(MJRefreshStateIdle)]; 81 | if (self.state != MJRefreshStateIdle || images.count == 0) return; 82 | // 停止动画 83 | [self.gifView stopAnimating]; 84 | // 设置当前需要显示的图片 85 | NSUInteger index = images.count * pullingPercent; 86 | if (index >= images.count) index = images.count - 1; 87 | self.gifView.image = images[index]; 88 | } 89 | 90 | - (void)placeSubviews 91 | { 92 | [super placeSubviews]; 93 | 94 | if (self.gifView.constraints.count) return; 95 | 96 | self.gifView.frame = self.bounds; 97 | if (self.stateLabel.hidden && self.lastUpdatedTimeLabel.hidden) { 98 | self.gifView.contentMode = UIViewContentModeCenter; 99 | } else { 100 | self.gifView.contentMode = UIViewContentModeRight; 101 | 102 | CGFloat stateWidth = self.stateLabel.mj_textWidth; 103 | CGFloat timeWidth = 0.0; 104 | if (!self.lastUpdatedTimeLabel.hidden) { 105 | timeWidth = self.lastUpdatedTimeLabel.mj_textWidth; 106 | } 107 | CGFloat textWidth = MAX(stateWidth, timeWidth); 108 | self.gifView.mj_w = self.mj_w * 0.5 - textWidth * 0.5 - self.labelLeftInset; 109 | } 110 | } 111 | 112 | - (void)setState:(MJRefreshState)state 113 | { 114 | MJRefreshCheckState 115 | 116 | // 根据状态做事情 117 | if (state == MJRefreshStatePulling || state == MJRefreshStateRefreshing) { 118 | NSArray *images = self.stateImages[@(state)]; 119 | if (images.count == 0) return; 120 | 121 | [self.gifView stopAnimating]; 122 | if (images.count == 1) { // 单张图片 123 | self.gifView.image = [images lastObject]; 124 | } else { // 多张图片 125 | self.gifView.animationImages = images; 126 | self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue]; 127 | [self.gifView startAnimating]; 128 | } 129 | } else if (state == MJRefreshStateIdle) { 130 | [self.gifView stopAnimating]; 131 | } 132 | } 133 | @end 134 | -------------------------------------------------------------------------------- /example/src/screen/tipsScreen.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable react-native/no-inline-styles */ 2 | /** 3 | * Sample React Native App 4 | * https://github.com/facebook/react-native 5 | * @flow 6 | */ 7 | 8 | import React, {Component} from 'react'; 9 | import {AppRegistry, StyleSheet, ScrollView, Text, View} from 'react-native'; 10 | 11 | import Tips from 'react-native-root-tips'; 12 | 13 | export default class RootTipsDemo extends Component { 14 | constructor(props) { 15 | super(props); 16 | this.state = {}; 17 | //you can set a global default options you like 18 | Tips.setDefaultOptions({ 19 | backgroundColor: 'black', 20 | opacity: 0.95, 21 | textColor: 'white', 22 | 23 | //setting image you like 24 | // imageLoading: require('./src/loading.gif'), 25 | // imageLoading: require('xxxxxxxxxx'), 26 | // imageSuccess: require('xxxxxxxxxx'), 27 | // imageFail: require('xxxxxxxxxx'), 28 | // imageInfo: require('xxxxxxxxxx'), 29 | // imageWarn: require('xxxxxxxxxx'), 30 | }); 31 | } 32 | 33 | _convenienceUseage() { 34 | // show a loading tips 35 | // you need call Tips.hide() to make tips disappear 36 | Tips.showLoading('loading...'); 37 | 38 | // show a successful tips 39 | // Tips.showSuccess('wow! success'); 40 | 41 | // show a failed tips 42 | // Tips.showFail('em...failed'); 43 | 44 | // show a Info tips 45 | // Tips.showInfo('info tips'); 46 | 47 | // show a warning tips 48 | // Tips.showWarn('warning'); 49 | 50 | // ** you can call hide() to hide showing tips ** 51 | // Tips.hide(); 52 | } 53 | 54 | _sampleSimple() { 55 | Tips.show('hello world!'); 56 | } 57 | _sampleDefaultLoading() { 58 | Tips.show('loading...', {showLoading: true}); 59 | } 60 | _sampleDefaultSuccess() { 61 | Tips.show('loading success', {showSuccess: true}); 62 | } 63 | _sampleDefaultFail() { 64 | Tips.show('loading fail', {showFail: true}); 65 | } 66 | 67 | _sampleCustomImage() { 68 | // you can use local Image and net image 69 | // Tips.show('Custom Images', { backgroundColor: 'white',textColor:'black',opacity:0.9, image:{uri:'https://github.com/openUmbrella/react-native-root-tips/raw/master/example/src/loading1.gif'}}); 70 | 71 | // local Image 72 | Tips.show('Custom Images', { 73 | backgroundColor: 'white', 74 | textColor: 'black', 75 | opacity: 0.9, 76 | image: require('../images/loading1.gif'), 77 | }); 78 | } 79 | _sampleOnlyImage() { 80 | Tips.show('tips will not show', {showText: false, showLoading: true}); 81 | } 82 | _sampleMask() { 83 | //when showing, you can't touch anything 84 | Tips.show('masking...', {mask: true, showLoading: true, maskColor: 'gray'}); 85 | } 86 | 87 | render() { 88 | return ( 89 | 90 | 91 | 92 | Simple Tips 93 | 94 | 95 | Default Loading 96 | 97 | 98 | Default Success 99 | 100 | 101 | Default Fail 102 | 103 | 104 | Custom Image 105 | 106 | 107 | Only Image 108 | 109 | 110 | Showing with Mask 111 | 112 | 113 | 114 | ); 115 | } 116 | } 117 | 118 | const styles = StyleSheet.create({ 119 | container: { 120 | flex: 1, 121 | justifyContent: 'center', 122 | alignItems: 'center', 123 | // backgroundColor: 'blue', 124 | marginTop: 150, 125 | }, 126 | welcome: { 127 | fontSize: 20, 128 | padding: 5, 129 | marginTop: 10, 130 | textAlign: 'center', 131 | backgroundColor: '#E6E6FA', 132 | }, 133 | }); 134 | 135 | AppRegistry.registerComponent('RootTipsDemo', () => RootTipsDemo); 136 | --------------------------------------------------------------------------------