├── 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 |
--------------------------------------------------------------------------------