Full Code of CoderMJLee/MJRefresh for AI

master 5647d82cd7e0 cached
209 files
364.5 KB
118.6k tokens
2 symbols
1 requests
Download .txt
Showing preview only (422K chars total). Download the full file or copy to clipboard to get everything.
Repository: CoderMJLee/MJRefresh
Branch: master
Commit: 5647d82cd7e0
Files: 209
Total size: 364.5 KB

Directory structure:
gitextract_a133_7b3/

├── .github/
│   └── ISSUE_TEMPLATE/
│       ├── bug--.md
│       └── feature--.md
├── .gitignore
├── .travis.yml
├── Examples/
│   ├── MJRefreshExample/
│   │   ├── MJRefreshExample/
│   │   │   ├── Base.lproj/
│   │   │   │   ├── LaunchScreen.xib
│   │   │   │   └── Main.storyboard
│   │   │   ├── Classes/
│   │   │   │   ├── Category/
│   │   │   │   │   ├── UIViewController+Example.h
│   │   │   │   │   └── UIViewController+Example.m
│   │   │   │   ├── DIY/
│   │   │   │   │   ├── MJChiBaoZiFooter.h
│   │   │   │   │   ├── MJChiBaoZiFooter.m
│   │   │   │   │   ├── MJChiBaoZiFooter2.h
│   │   │   │   │   ├── MJChiBaoZiFooter2.m
│   │   │   │   │   ├── MJChiBaoZiHeader.h
│   │   │   │   │   ├── MJChiBaoZiHeader.m
│   │   │   │   │   ├── MJDIYAutoFooter.h
│   │   │   │   │   ├── MJDIYAutoFooter.m
│   │   │   │   │   ├── MJDIYBackFooter.h
│   │   │   │   │   ├── MJDIYBackFooter.m
│   │   │   │   │   ├── MJDIYHeader.h
│   │   │   │   │   └── MJDIYHeader.m
│   │   │   │   ├── First/
│   │   │   │   │   ├── MJExample.h
│   │   │   │   │   ├── MJExample.m
│   │   │   │   │   ├── MJExampleViewController.h
│   │   │   │   │   ├── MJExampleViewController.m
│   │   │   │   │   ├── MJExampleWindow.h
│   │   │   │   │   ├── MJExampleWindow.m
│   │   │   │   │   ├── MJSingleViewController.h
│   │   │   │   │   ├── MJSingleViewController.m
│   │   │   │   │   ├── MJTempViewController.h
│   │   │   │   │   └── MJTempViewController.m
│   │   │   │   ├── Other/
│   │   │   │   │   ├── AppDelegate.h
│   │   │   │   │   └── AppDelegate.m
│   │   │   │   ├── Second/
│   │   │   │   │   ├── MJCollectionViewController.h
│   │   │   │   │   ├── MJCollectionViewController.m
│   │   │   │   │   ├── MJHorizontalCollectionViewController.h
│   │   │   │   │   ├── MJHorizontalCollectionViewController.m
│   │   │   │   │   ├── MJPinHeaderCollectionViewController.swift
│   │   │   │   │   ├── MJTableViewController.h
│   │   │   │   │   ├── MJTableViewController.m
│   │   │   │   │   ├── MJTestViewController.h
│   │   │   │   │   ├── MJTestViewController.m
│   │   │   │   │   ├── MJTestViewController.xib
│   │   │   │   │   ├── MJWebViewViewController.h
│   │   │   │   │   ├── MJWebViewViewController.m
│   │   │   │   │   └── MJWebViewViewController.xib
│   │   │   │   ├── SwiftExample/
│   │   │   │   │   └── MJWKWebViewController.swift
│   │   │   │   └── i18n/
│   │   │   │       ├── CustomLanguages.bundle/
│   │   │   │       │   ├── en.lproj/
│   │   │   │       │   │   └── Localizable.strings
│   │   │   │       │   ├── ko.lproj/
│   │   │   │       │   │   └── Localizable.strings
│   │   │   │       │   ├── ru.lproj/
│   │   │   │       │   │   └── Localizable.strings
│   │   │   │       │   ├── uk.lproj/
│   │   │   │       │   │   └── Localizable.strings
│   │   │   │       │   ├── zh-Hans.lproj/
│   │   │   │       │   │   └── Localizable.strings
│   │   │   │       │   └── zh-Hant.lproj/
│   │   │   │       │       └── Localizable.strings
│   │   │   │       ├── I18NExampleViewController.swift
│   │   │   │       ├── ar.lproj/
│   │   │   │       │   └── MJRefresh_i18n.strings
│   │   │   │       ├── en.lproj/
│   │   │   │       │   └── MJRefresh_i18n.strings
│   │   │   │       ├── ko.lproj/
│   │   │   │       │   └── MJRefresh_i18n.strings
│   │   │   │       ├── ru.lproj/
│   │   │   │       │   └── MJRefresh_i18n.strings
│   │   │   │       ├── uk.lproj/
│   │   │   │       │   └── MJRefresh_i18n.strings
│   │   │   │       ├── zh-Hans.lproj/
│   │   │   │       │   └── MJRefresh_i18n.strings
│   │   │   │       └── zh-Hant.lproj/
│   │   │   │           └── MJRefresh_i18n.strings
│   │   │   ├── Images.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   ├── DianPing/
│   │   │   │   │   ├── dropdown_anim__0001.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00010.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00011.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00012.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00013.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00014.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00015.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00016.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00017.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00018.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00019.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0002.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00020.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00021.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00022.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00023.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00024.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00025.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00026.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00027.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00028.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00029.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0003.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00030.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00031.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00032.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00033.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00034.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00035.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00036.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00037.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00038.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00039.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0004.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00040.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00041.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00042.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00043.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00044.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00045.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00046.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00047.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00048.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00049.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0005.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00050.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00051.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00052.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00053.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00054.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00055.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00056.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00057.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00058.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00059.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0006.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00060.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0007.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0008.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0009.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_loading_01.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_loading_02.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   └── dropdown_loading_03.imageset/
│   │   │   │   │       └── Contents.json
│   │   │   │   ├── MJRefresh.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── NavBar.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── NavBar64.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── logo.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Info.plist
│   │   │   ├── MJRefreshExample-Bridging-Header.h
│   │   │   ├── PrefixHeader.pch
│   │   │   └── main.m
│   │   ├── MJRefreshExample.xcodeproj/
│   │   │   └── project.pbxproj
│   │   └── MJRefreshExampleTests/
│   │       ├── Info.plist
│   │       └── MJRefreshExampleTests.m
│   └── SPMTestExample/
│       ├── SPMTestExample/
│       │   ├── AppDelegate.swift
│       │   ├── Assets.xcassets/
│       │   │   ├── AccentColor.colorset/
│       │   │   │   └── Contents.json
│       │   │   ├── AppIcon.appiconset/
│       │   │   │   └── Contents.json
│       │   │   └── Contents.json
│       │   ├── Base.lproj/
│       │   │   ├── LaunchScreen.storyboard
│       │   │   └── Main.storyboard
│       │   ├── Info.plist
│       │   ├── SceneDelegate.swift
│       │   └── ViewController.swift
│       └── SPMTestExample.xcodeproj/
│           └── project.pbxproj
├── LICENSE
├── MJRefresh/
│   ├── Base/
│   │   ├── MJRefreshAutoFooter.h
│   │   ├── MJRefreshAutoFooter.m
│   │   ├── MJRefreshBackFooter.h
│   │   ├── MJRefreshBackFooter.m
│   │   ├── MJRefreshComponent.h
│   │   ├── MJRefreshComponent.m
│   │   ├── MJRefreshFooter.h
│   │   ├── MJRefreshFooter.m
│   │   ├── MJRefreshHeader.h
│   │   ├── MJRefreshHeader.m
│   │   ├── MJRefreshTrailer.h
│   │   └── MJRefreshTrailer.m
│   ├── Custom/
│   │   ├── Footer/
│   │   │   ├── Auto/
│   │   │   │   ├── MJRefreshAutoGifFooter.h
│   │   │   │   ├── MJRefreshAutoGifFooter.m
│   │   │   │   ├── MJRefreshAutoNormalFooter.h
│   │   │   │   ├── MJRefreshAutoNormalFooter.m
│   │   │   │   ├── MJRefreshAutoStateFooter.h
│   │   │   │   └── MJRefreshAutoStateFooter.m
│   │   │   └── Back/
│   │   │       ├── MJRefreshBackGifFooter.h
│   │   │       ├── MJRefreshBackGifFooter.m
│   │   │       ├── MJRefreshBackNormalFooter.h
│   │   │       ├── MJRefreshBackNormalFooter.m
│   │   │       ├── MJRefreshBackStateFooter.h
│   │   │       └── MJRefreshBackStateFooter.m
│   │   ├── Header/
│   │   │   ├── MJRefreshGifHeader.h
│   │   │   ├── MJRefreshGifHeader.m
│   │   │   ├── MJRefreshNormalHeader.h
│   │   │   ├── MJRefreshNormalHeader.m
│   │   │   ├── MJRefreshStateHeader.h
│   │   │   └── MJRefreshStateHeader.m
│   │   └── Trailer/
│   │       ├── MJRefreshNormalTrailer.h
│   │       ├── MJRefreshNormalTrailer.m
│   │       ├── MJRefreshStateTrailer.h
│   │       └── MJRefreshStateTrailer.m
│   ├── Info.plist
│   ├── MJRefresh.bundle/
│   │   ├── en.lproj/
│   │   │   └── Localizable.strings
│   │   ├── ko.lproj/
│   │   │   └── Localizable.strings
│   │   ├── ru.lproj/
│   │   │   └── Localizable.strings
│   │   ├── uk.lproj/
│   │   │   └── Localizable.strings
│   │   ├── zh-Hans.lproj/
│   │   │   └── Localizable.strings
│   │   └── zh-Hant.lproj/
│   │       └── Localizable.strings
│   ├── MJRefresh.h
│   ├── MJRefreshConfig.h
│   ├── MJRefreshConfig.m
│   ├── MJRefreshConst.h
│   ├── MJRefreshConst.m
│   ├── NSBundle+MJRefresh.h
│   ├── NSBundle+MJRefresh.m
│   ├── PrivacyInfo.xcprivacy
│   ├── UICollectionViewLayout+MJRefresh.h
│   ├── UICollectionViewLayout+MJRefresh.m
│   ├── UIScrollView+MJExtension.h
│   ├── UIScrollView+MJExtension.m
│   ├── UIScrollView+MJRefresh.h
│   ├── UIScrollView+MJRefresh.m
│   ├── UIView+MJExtension.h
│   └── UIView+MJExtension.m
├── MJRefresh.podspec
├── MJRefresh.xcodeproj/
│   ├── project.pbxproj
│   └── xcshareddata/
│       └── xcschemes/
│           └── MJRefresh.xcscheme
├── Package.swift
└── README.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE/bug--.md
================================================
---
name: Bug上报
about: 提交Bug让框架更加健壮
title: ''
labels: bug
assignees: ''

---

🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶

😁为了能够更好地复现问题和修复问题, 请提供 Demo 和详细的 bug 重现步骤😭

🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶
> 记得删除以上内容

**描述bug**
清晰简单地描述这个bug是啥

**必现/偶发?**
必现

**怎么样重现这个bug**
1. 显示哪个页面
2. 点击哪个位置
3. 滚动到哪个位置
4. 发生了什么错误

**你期望的结果是什么?**
你本来期望得到的正确结果是怎样的?就是解决bug之后的结果

**截图**
如果有必要的话,请上传几张截图

**运行环境**
 - iPhone6
 - iOS8.1
 - Xcode10

**额外的**
最好能提供出现bug的Demo


================================================
FILE: .github/ISSUE_TEMPLATE/feature--.md
================================================
---
name: Feature建议
about: 为框架提供新功能建议
title: ''
labels: feature
assignees: ''

---

**你的新功能建议是否牵扯到某个常见的问题?**
比如,在开发中,经常遇到XXX问题,目前框架的功能不足以解决这个问题

**你希望达到的效果**
比如,我希望框架能够帮助我解决XXX问题,实现XXXX那样的效果

**你能考虑到的可选实现方案**
描述一下你认为要实现这个功能,有哪些可行的一些实现方案?


================================================
FILE: .gitignore
================================================
.DS_Store

# Xcode
build/*
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
*.xcworkspace
!default.xcworkspace
xcuserdata
profile
*.moved-aside
*.xcuserstate


================================================
FILE: .travis.yml
================================================
language: objective-c
xcode_project: MJRefreshExample.xcodeproj
xcode_scheme: MJRefresh

env:
  global:
    - FRAMEWORK_NAME=MJRefresh
before_install:
  - gem install xcpretty
  
script:
  - xcodebuild -project $xcode_project -scheme $FRAMEWORK_NAME build | xcpretty
  - pod lib lint
  - carthage build --no-skip-current

notifications:
  email: false


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Base.lproj/LaunchScreen.xib
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="10116" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view contentMode="scaleToFill" id="iN0-l3-epB">
            <rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="  Copyright (c) 2016年 小码哥. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
                    <rect key="frame" x="20" y="439" width="441" height="21"/>
                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
                    <nil key="highlightedColor"/>
                </label>
                <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="MJRefresh" translatesAutoresizingMaskIntoConstraints="NO" id="XTX-D8-JkJ">
                    <rect key="frame" x="140" y="140" width="200" height="200"/>
                    <constraints>
                        <constraint firstAttribute="height" constant="200" id="Yjl-z0-AQq"/>
                        <constraint firstAttribute="width" constant="200" id="b2j-uN-0ek"/>
                    </constraints>
                </imageView>
                <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="http://www.520it.com" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="ofo-Sj-yNl">
                    <rect key="frame" x="20" y="398" width="440" height="20.5"/>
                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="calibratedRGB"/>
                    <nil key="highlightedColor"/>
                </label>
                <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="Logo" translatesAutoresizingMaskIntoConstraints="NO" id="0ve-6E-pvp">
                    <rect key="frame" x="0.0" y="0.0" width="480" height="140"/>
                </imageView>
            </subviews>
            <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
            <constraints>
                <constraint firstItem="XTX-D8-JkJ" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="centerY" id="AF4-xX-WmS"/>
                <constraint firstItem="XTX-D8-JkJ" firstAttribute="centerX" secondItem="iN0-l3-epB" secondAttribute="centerX" id="HyF-59-iKh"/>
                <constraint firstItem="0ve-6E-pvp" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" id="KQM-Cd-Hc3"/>
                <constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
                <constraint firstAttribute="trailing" secondItem="0ve-6E-pvp" secondAttribute="trailing" id="LtZ-i4-kFh"/>
                <constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
                <constraint firstAttribute="trailing" secondItem="ofo-Sj-yNl" secondAttribute="trailing" constant="20" id="OIk-aG-mfh"/>
                <constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
                <constraint firstItem="XTX-D8-JkJ" firstAttribute="top" secondItem="0ve-6E-pvp" secondAttribute="bottom" id="dbG-fu-pEr"/>
                <constraint firstItem="8ie-xW-0ye" firstAttribute="top" secondItem="ofo-Sj-yNl" secondAttribute="bottom" constant="20" id="gGa-XS-sGm"/>
                <constraint firstItem="ofo-Sj-yNl" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" id="gRD-8E-YGE"/>
                <constraint firstItem="0ve-6E-pvp" firstAttribute="top" secondItem="iN0-l3-epB" secondAttribute="top" id="lEK-cb-8gf"/>
            </constraints>
            <nil key="simulatedStatusBarMetrics"/>
            <freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
            <point key="canvasLocation" x="548" y="455"/>
        </view>
    </objects>
    <resources>
        <image name="Logo" width="800" height="500"/>
        <image name="MJRefresh" width="400" height="400"/>
    </resources>
</document>


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19455" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="06B-cM-i4B">
    <device id="retina4_7" orientation="portrait" appearance="light"/>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19454"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--Tab Bar Controller-->
        <scene sceneID="Yzv-PK-ggm">
            <objects>
                <tabBarController storyboardIdentifier="2" id="4Q8-16-Z7C" sceneMemberID="viewController">
                    <nil key="simulatedBottomBarMetrics"/>
                    <tabBar key="tabBar" contentMode="scaleToFill" id="BAy-Gq-nS1">
                        <rect key="frame" x="0.0" y="0.0" width="320" height="49"/>
                        <autoresizingMask key="autoresizingMask"/>
                        <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.0" colorSpace="custom" customColorSpace="sRGB"/>
                    </tabBar>
                    <connections>
                        <segue destination="X1t-Y8-mVA" kind="relationship" relationship="viewControllers" id="Fa4-Fv-qWQ"/>
                        <segue destination="MBo-Zo-CjM" kind="relationship" relationship="viewControllers" id="6aa-Ke-qMk"/>
                    </connections>
                </tabBarController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="Dfu-Ul-KGT" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-403" y="-2074"/>
        </scene>
        <!--Root View Controller-->
        <scene sceneID="85L-th-5oc">
            <objects>
                <tableViewController id="bYG-Kt-eGn" customClass="MJSingleViewController" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="kOg-FB-cx3">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <connections>
                            <outlet property="dataSource" destination="bYG-Kt-eGn" id="UPe-dz-o9s"/>
                            <outlet property="delegate" destination="bYG-Kt-eGn" id="aly-IU-bHB"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="Root View Controller" id="0Su-Ej-eeJ"/>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="7OP-QF-95t" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1149" y="-2177"/>
        </scene>
        <!--Item-->
        <scene sceneID="2j8-oC-MnK">
            <objects>
                <navigationController id="MBo-Zo-CjM" sceneMemberID="viewController">
                    <tabBarItem key="tabBarItem" title="Item" id="hIa-cL-CHu"/>
                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="gXg-XT-JWK">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <connections>
                        <segue destination="bYG-Kt-eGn" kind="relationship" relationship="rootViewController" id="pQs-fb-3dO"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="EVD-fp-fF2" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="329" y="-2177"/>
        </scene>
        <!--I18NExample View Controller-->
        <scene sceneID="D5T-qz-8pS">
            <objects>
                <tableViewController storyboardIdentifier="1" id="m94-yi-d3y" userLabel="I18NExample View Controller" customClass="I18NExampleViewController" customModule="MJRefreshExample" customModuleProvider="target" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="cbU-lV-mY4">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <connections>
                            <outlet property="dataSource" destination="m94-yi-d3y" id="tv3-44-MfP"/>
                            <outlet property="delegate" destination="m94-yi-d3y" id="IYQ-uj-ZZ4"/>
                        </connections>
                    </tableView>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="kVW-tD-5az" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="464" y="-747"/>
        </scene>
        <!--Navigation Controller-->
        <scene sceneID="Gvt-ow-kGR">
            <objects>
                <navigationController storyboardIdentifier="0" id="06B-cM-i4B" sceneMemberID="viewController">
                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="Kj6-u7-ICR">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <connections>
                        <segue destination="3cf-VR-wv0" kind="relationship" relationship="rootViewController" id="dcc-cy-YeH"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="3n0-8i-Iv9" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="263" y="313"/>
        </scene>
        <!--MJRefresh演示-->
        <scene sceneID="VZ2-J9-HSv">
            <objects>
                <tableViewController id="3cf-VR-wv0" customClass="MJExampleViewController" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="IS9-AM-1DI">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <prototypes>
                            <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="example" textLabel="veW-N9-syp" detailTextLabel="Iv7-PA-lBt" style="IBUITableViewCellStyleSubtitle" id="xJS-7u-6pG">
                                <rect key="frame" x="0.0" y="44.5" width="375" height="44"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="xJS-7u-6pG" id="rMg-IH-g5u">
                                    <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
                                    <autoresizingMask key="autoresizingMask"/>
                                    <subviews>
                                        <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Title" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="veW-N9-syp">
                                            <rect key="frame" x="16" y="6" width="31.5" height="19.5"/>
                                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                            <fontDescription key="fontDescription" type="system" pointSize="16"/>
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                        <label opaque="NO" multipleTouchEnabled="YES" contentMode="left" text="Subtitle" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="Iv7-PA-lBt">
                                            <rect key="frame" x="16" y="25.5" width="40.5" height="13.5"/>
                                            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
                                            <fontDescription key="fontDescription" type="system" pointSize="11"/>
                                            <nil key="textColor"/>
                                            <nil key="highlightedColor"/>
                                        </label>
                                    </subviews>
                                </tableViewCellContentView>
                            </tableViewCell>
                        </prototypes>
                        <connections>
                            <outlet property="dataSource" destination="3cf-VR-wv0" id="Wly-ta-J10"/>
                            <outlet property="delegate" destination="3cf-VR-wv0" id="VzK-gL-E0w"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="MJRefresh演示" id="rSH-gE-746">
                        <barButtonItem key="backBarButtonItem" title="返回" id="vKU-iZ-uZG"/>
                    </navigationItem>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="Klq-V7-0ly" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1021" y="313"/>
        </scene>
        <!--Root View Controller-->
        <scene sceneID="J8P-tF-fZf">
            <objects>
                <tableViewController id="cR6-pa-HhO" customClass="MJSingleViewController" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="22" sectionFooterHeight="22" id="sAi-eu-GBh">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <connections>
                            <outlet property="dataSource" destination="cR6-pa-HhO" id="HsB-FV-ckP"/>
                            <outlet property="delegate" destination="cR6-pa-HhO" id="S8o-67-plS"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="Root View Controller" id="oCC-mA-vdX"/>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="e1R-Oh-LWF" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="1135" y="-1474"/>
        </scene>
        <!--Item-->
        <scene sceneID="5BZ-bc-zEs">
            <objects>
                <navigationController id="X1t-Y8-mVA" sceneMemberID="viewController">
                    <tabBarItem key="tabBarItem" title="Item" id="Dg6-YQ-9en"/>
                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="mcw-Hk-IYU">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <connections>
                        <segue destination="cR6-pa-HhO" kind="relationship" relationship="rootViewController" id="PUF-0S-3Ga"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="6pU-qV-6MV" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="348" y="-1474"/>
        </scene>
    </scenes>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Category/UIViewController+Example.h
================================================
//
//  UIViewController+Example.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/12.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UIViewController (Example)
@property (copy, nonatomic) NSString *method;
@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Category/UIViewController+Example.m
================================================
//
//  UIViewController+Example.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/12.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import "UIViewController+Example.h"
#import <objc/runtime.h>

@implementation UIViewController (Example)

#pragma mark - swizzle
+ (void)load
{
    Method method1 = class_getInstanceMethod([self class], NSSelectorFromString(@"dealloc"));
    Method method2 = class_getInstanceMethod([self class], @selector(deallocSwizzle));
    method_exchangeImplementations(method1, method2);
}

- (void)deallocSwizzle
{
    NSLog(@"%@被销毁了", self);
    
    [self deallocSwizzle];
}

static char MethodKey;
- (void)setMethod:(NSString *)method
{
    objc_setAssociatedObject(self, &MethodKey, method, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)method
{
    return objc_getAssociatedObject(self, &MethodKey);
}
@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJChiBaoZiFooter.h
================================================
//
//  MJChiBaoZiFooter.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/12.
//  Copyright © 2015年 小码哥. All rights reserved.
//

@import MJRefresh;

@interface MJChiBaoZiFooter : MJRefreshAutoGifFooter

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJChiBaoZiFooter.m
================================================
//
//  MJChiBaoZiFooter.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/12.
//  Copyright © 2015年 小码哥. All rights reserved.
//

#import "MJChiBaoZiFooter.h"

@implementation MJChiBaoZiFooter
#pragma mark - 重写方法
#pragma mark 基本设置
- (void)prepare
{
    [super prepare];
    
    // 设置正在刷新状态的动画图片
    NSMutableArray *refreshingImages = [NSMutableArray array];
    for (NSUInteger i = 1; i<=3; i++) {
        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_loading_0%zd", i]];
        [refreshingImages addObject:image];
    }
    [self setImages:refreshingImages forState:MJRefreshStateRefreshing];
}
@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJChiBaoZiFooter2.h
================================================
//
//  MJChiBaoZiFooter2.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/12.
//  Copyright © 2015年 小码哥. All rights reserved.
//

@import MJRefresh;

@interface MJChiBaoZiFooter2 : MJRefreshBackGifFooter

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJChiBaoZiFooter2.m
================================================
//
//  MJChiBaoZiFooter2.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/12.
//  Copyright © 2015年 小码哥. All rights reserved.
//

#import "MJChiBaoZiFooter2.h"

@implementation MJChiBaoZiFooter2
#pragma mark - 重写方法
#pragma mark 基本设置
- (void)prepare
{
    [super prepare];
    
    // 设置普通状态的动画图片
    NSMutableArray *idleImages = [NSMutableArray array];
    for (NSUInteger i = 1; i<=60; i++) {
        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_anim__000%zd", i]];
        [idleImages addObject:image];
    }
    [self setImages:idleImages forState:MJRefreshStateIdle];
    
    // 设置即将刷新状态的动画图片(一松开就会刷新的状态)
    NSMutableArray *refreshingImages = [NSMutableArray array];
    for (NSUInteger i = 1; i<=3; i++) {
        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_loading_0%zd", i]];
        [refreshingImages addObject:image];
    }
    [self setImages:refreshingImages forState:MJRefreshStatePulling];
    
    // 设置正在刷新状态的动画图片
    [self setImages:refreshingImages forState:MJRefreshStateRefreshing];
}
@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJChiBaoZiHeader.h
================================================
//
//  MJChiBaoZiHeader.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/12.
//  Copyright © 2015年 小码哥. All rights reserved.
//  吃包子效果的头部控件

@import MJRefresh;

@interface MJChiBaoZiHeader : MJRefreshGifHeader

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJChiBaoZiHeader.m
================================================
//
//  MJChiBaoZiHeader.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/12.
//  Copyright © 2015年 小码哥. All rights reserved.
//

#import "MJChiBaoZiHeader.h"

@implementation MJChiBaoZiHeader
#pragma mark - 重写方法
#pragma mark 基本设置
- (void)prepare
{
    [super prepare];
    
    // 设置普通状态的动画图片
    NSMutableArray *idleImages = [NSMutableArray array];
    for (NSUInteger i = 1; i<=60; i++) {
        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_anim__000%zd", i]];
        [idleImages addObject:image];
    }
     [self setImages:idleImages forState:MJRefreshStateIdle];
    
    // 设置即将刷新状态的动画图片(一松开就会刷新的状态)
    NSMutableArray *refreshingImages = [NSMutableArray array];
    for (NSUInteger i = 1; i<=3; i++) {
        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_loading_0%zd", i]];
        [refreshingImages addObject:image];
    }
    [self setImages:refreshingImages forState:MJRefreshStatePulling];
    
    // 设置正在刷新状态的动画图片
    [self setImages:refreshingImages forState:MJRefreshStateRefreshing];
}
@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJDIYAutoFooter.h
================================================
//
//  MJDIYAutoFooter.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/13.
//  Copyright © 2015年 小码哥. All rights reserved.
//

@import MJRefresh;

@interface MJDIYAutoFooter : MJRefreshAutoFooter

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJDIYAutoFooter.m
================================================
//
//  MJDIYAutoFooter.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/13.
//  Copyright © 2015年 小码哥. All rights reserved.
//

#import "MJDIYAutoFooter.h"

@interface MJDIYAutoFooter()
@property (weak, nonatomic) UILabel *label;
@property (weak, nonatomic) UISwitch *s;
@property (weak, nonatomic) UIActivityIndicatorView *loading;
@end

@implementation MJDIYAutoFooter
#pragma mark - 重写方法
#pragma mark 在这里做一些初始化配置(比如添加子控件)
- (void)prepare
{
    [super prepare];
    
    // 设置控件的高度
    self.mj_h = 50;
    
    // 添加label
    UILabel *label = [[UILabel alloc] init];
    label.textColor = [UIColor colorWithRed:1.0 green:0.5 blue:0.0 alpha:1.0];
    label.font = [UIFont boldSystemFontOfSize:16];
    label.textAlignment = NSTextAlignmentCenter;
    [self addSubview:label];
    self.label = label;
    
    // 打酱油的开关
    UISwitch *s = [[UISwitch alloc] init];
    [self addSubview:s];
    self.s = s;
    
    // loading
    UIActivityIndicatorView *loading = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [self addSubview:loading];
    self.loading = loading;
}

#pragma mark 在这里设置子控件的位置和尺寸
- (void)placeSubviews
{
    [super placeSubviews];
    
    self.label.frame = self.bounds;
    self.s.center = CGPointMake(self.mj_w - 20, self.mj_h - 20);
    
    self.loading.center = CGPointMake(30, self.mj_h * 0.5);
}

#pragma mark 监听scrollView的contentOffset改变
- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change
{
    [super scrollViewContentOffsetDidChange:change];
    
}

#pragma mark 监听scrollView的contentSize改变
- (void)scrollViewContentSizeDidChange:(NSDictionary *)change
{
    [super scrollViewContentSizeDidChange:change];
    
}

#pragma mark 监听scrollView的拖拽状态改变
- (void)scrollViewPanStateDidChange:(NSDictionary *)change
{
    [super scrollViewPanStateDidChange:change];
    
}

#pragma mark 监听控件的刷新状态
- (void)setState:(MJRefreshState)state
{
    MJRefreshCheckState;
    
    switch (state) {
        case MJRefreshStateIdle:
            self.label.text = @"赶紧上拉吖(开关是打酱油滴)";
            [self.loading stopAnimating];
            [self.s setOn:NO animated:YES];
            break;
        case MJRefreshStateRefreshing:
            [self.s setOn:YES animated:YES];
            self.label.text = @"加载数据中(开关是打酱油滴)";
            [self.loading startAnimating];
            break;
        case MJRefreshStateNoMoreData:
            self.label.text = @"木有数据了(开关是打酱油滴)";
            [self.s setOn:NO animated:YES];
            [self.loading stopAnimating];
            break;
        default:
            break;
    }
}

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJDIYBackFooter.h
================================================
//
//  MJDIYBackFooter.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/13.
//  Copyright © 2015年 小码哥. All rights reserved.
//

@import MJRefresh;

@interface MJDIYBackFooter : MJRefreshBackFooter

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJDIYBackFooter.m
================================================
//
//  MJDIYBackFooter.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/13.
//  Copyright © 2015年 小码哥. All rights reserved.
//

#import "MJDIYBackFooter.h"

@interface MJDIYBackFooter()
@property (weak, nonatomic) UILabel *label;
@property (weak, nonatomic) UISwitch *s;
@property (weak, nonatomic) UIImageView *logo;
@property (weak, nonatomic) UIActivityIndicatorView *loading;
@end

@implementation MJDIYBackFooter
#pragma mark - 重写方法
#pragma mark 在这里做一些初始化配置(比如添加子控件)
- (void)prepare
{
    [super prepare];
    
    // 设置控件的高度
    self.mj_h = 50;
    
    // 添加label
    UILabel *label = [[UILabel alloc] init];
    label.textColor = [UIColor colorWithRed:1.0 green:0.5 blue:0.0 alpha:1.0];
    label.font = [UIFont boldSystemFontOfSize:16];
    label.textAlignment = NSTextAlignmentCenter;
    [self addSubview:label];
    self.label = label;
    
    // 打酱油的开关
    UISwitch *s = [[UISwitch alloc] init];
    [self addSubview:s];
    self.s = s;
    
    // logo
    UIImageView *logo = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Logo"]];
    logo.contentMode = UIViewContentModeScaleAspectFit;
    [self addSubview:logo];
    self.logo = logo;
    
    // loading
    UIActivityIndicatorView *loading = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [self addSubview:loading];
    self.loading = loading;
}

#pragma mark 在这里设置子控件的位置和尺寸
- (void)placeSubviews
{
    [super placeSubviews];
    
    self.label.frame = self.bounds;
    
    self.logo.bounds = CGRectMake(0, 0, self.bounds.size.width, 100);
    self.logo.center = CGPointMake(self.mj_w * 0.5, self.mj_h + self.logo.mj_h * 0.5);
    
    self.loading.center = CGPointMake(self.mj_w - 30, self.mj_h * 0.5);
}

#pragma mark 监听scrollView的contentOffset改变
- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change
{
    [super scrollViewContentOffsetDidChange:change];
    
}

#pragma mark 监听scrollView的contentSize改变
- (void)scrollViewContentSizeDidChange:(NSDictionary *)change
{
    [super scrollViewContentSizeDidChange:change];
    
}

#pragma mark 监听scrollView的拖拽状态改变
- (void)scrollViewPanStateDidChange:(NSDictionary *)change
{
    [super scrollViewPanStateDidChange:change];
    
}

#pragma mark 监听控件的刷新状态
- (void)setState:(MJRefreshState)state
{
    MJRefreshCheckState;
    
    switch (state) {
        case MJRefreshStateIdle:
            [self.loading stopAnimating];
            [self.s setOn:NO animated:YES];
            self.label.text = @"赶紧上拉吖(开关是打酱油滴)";
            break;
        case MJRefreshStatePulling:
            [self.loading stopAnimating];
            [self.s setOn:YES animated:YES];
            self.label.text = @"赶紧放开我吧(开关是打酱油滴)";
            break;
        case MJRefreshStateRefreshing:
            [self.loading startAnimating];
            [self.s setOn:YES animated:YES];
            self.label.text = @"加载数据中(开关是打酱油滴)";
            break;
        case MJRefreshStateNoMoreData:
            [self.loading stopAnimating];
            self.label.text = @"木有数据了(开关是打酱油滴)";
            [self.s setOn:NO animated:YES];
        default:
            break;
    }
}

#pragma mark 监听拖拽比例(控件被拖出来的比例)
- (void)setPullingPercent:(CGFloat)pullingPercent
{
    [super setPullingPercent:pullingPercent];
    
    // 1.0 0.5 0.0
    // 0.5 0.0 0.5
    CGFloat red = 1.0 - pullingPercent * 0.5;
    CGFloat green = 0.5 - 0.5 * pullingPercent;
    CGFloat blue = 0.5 * pullingPercent;
    self.label.textColor = [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
}

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJDIYHeader.h
================================================
//
//  MJDIYHeader.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/13.
//  Copyright © 2015年 小码哥. All rights reserved.
//

@import MJRefresh;

@interface MJDIYHeader : MJRefreshHeader

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJDIYHeader.m
================================================
//
//  MJDIYHeader.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/13.
//  Copyright © 2015年 小码哥. All rights reserved.
//

#import "MJDIYHeader.h"

@interface MJDIYHeader()
@property (weak, nonatomic) UILabel *label;
@property (weak, nonatomic) UISwitch *s;
@property (weak, nonatomic) UIImageView *logo;
@property (weak, nonatomic) UIActivityIndicatorView *loading;
@end

@implementation MJDIYHeader
#pragma mark - 重写方法
#pragma mark 在这里做一些初始化配置(比如添加子控件)
- (void)prepare
{
    [super prepare];
    
    // 设置控件的高度
    self.mj_h = 50;
    
    // 添加label
    UILabel *label = [[UILabel alloc] init];
    label.textColor = [UIColor colorWithRed:1.0 green:0.5 blue:0.0 alpha:1.0];
    label.font = [UIFont boldSystemFontOfSize:16];
    label.textAlignment = NSTextAlignmentCenter;
    [self addSubview:label];
    self.label = label;
    
    // 打酱油的开关
    UISwitch *s = [[UISwitch alloc] init];
    [self addSubview:s];
    self.s = s;
    
    // logo
    UIImageView *logo = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Logo"]];
    logo.contentMode = UIViewContentModeScaleAspectFit;
    [self addSubview:logo];
    self.logo = logo;
    
    // loading
    UIActivityIndicatorView *loading = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    [self addSubview:loading];
    self.loading = loading;
}

#pragma mark 在这里设置子控件的位置和尺寸
- (void)placeSubviews
{
    [super placeSubviews];

    self.label.frame = self.bounds;
    
    self.logo.bounds = CGRectMake(0, 0, self.bounds.size.width, 100);
    self.logo.center = CGPointMake(self.mj_w * 0.5, - self.logo.mj_h + 20);
    
    self.loading.center = CGPointMake(self.mj_w - 30, self.mj_h * 0.5);
}

#pragma mark 监听scrollView的contentOffset改变
- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change
{
    [super scrollViewContentOffsetDidChange:change];

}

#pragma mark 监听scrollView的contentSize改变
- (void)scrollViewContentSizeDidChange:(NSDictionary *)change
{
    [super scrollViewContentSizeDidChange:change];
    
}

#pragma mark 监听scrollView的拖拽状态改变
- (void)scrollViewPanStateDidChange:(NSDictionary *)change
{
    [super scrollViewPanStateDidChange:change];

}

#pragma mark 监听控件的刷新状态
- (void)setState:(MJRefreshState)state
{
    MJRefreshCheckState;

    switch (state) {
        case MJRefreshStateIdle:
            [self.loading stopAnimating];
            [self.s setOn:NO animated:YES];
            self.label.text = @"赶紧下拉吖(开关是打酱油滴)";
            break;
        case MJRefreshStatePulling:
            [self.loading stopAnimating];
            [self.s setOn:YES animated:YES];
            self.label.text = @"赶紧放开我吧(开关是打酱油滴)";
            break;
        case MJRefreshStateRefreshing:
            [self.s setOn:YES animated:YES];
            self.label.text = @"加载数据中(开关是打酱油滴)";
            [self.loading startAnimating];
            break;
        default:
            break;
    }
}

#pragma mark 监听拖拽比例(控件被拖出来的比例)
- (void)setPullingPercent:(CGFloat)pullingPercent
{
    [super setPullingPercent:pullingPercent];
    
    // 1.0 0.5 0.0
    // 0.5 0.0 0.5
    CGFloat red = 1.0 - pullingPercent * 0.5;
    CGFloat green = 0.5 - 0.5 * pullingPercent;
    CGFloat blue = 0.5 * pullingPercent;
    self.label.textColor = [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
}

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExample.h
================================================
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  MJExample.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/5.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface MJExample : NSObject
@property (copy, nonatomic) NSString *header;
@property (strong, nonatomic) NSArray *titles;
@property (strong, nonatomic) NSArray *methods;
@property (strong, nonatomic) NSArray<Class> *vcClasses;
@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExample.m
================================================
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  MJExample.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/5.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import "MJExample.h"

@implementation MJExample

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExampleViewController.h
================================================
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  MJExampleViewController.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/5.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MJExampleViewController : UITableViewController

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExampleViewController.m
================================================
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  MJExampleViewController.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/5.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import "MJExampleViewController.h"
#import "MJTableViewController.h"
#import "MJWebViewViewController.h"
#import "MJCollectionViewController.h"
#import "MJExample.h"
#import "UIViewController+Example.h"
#import "MJHorizontalCollectionViewController.h"
#import "MJRefreshExample-Swift.h"

@import MJRefresh;

static NSString *const MJExample00 = @"UITableView + 下拉刷新";
static NSString *const MJExample10 = @"UITableView + 上拉刷新";
static NSString *const MJExample20 = @"UICollectionView";
static NSString *const MJExample30 = @"UIWebView";
static NSString *const MJExample40 = @"WKWebView";

@interface MJExampleViewController()
@property (strong, nonatomic) NSArray *examples;
@end

@implementation MJExampleViewController

- (NSArray *)examples
{
    if (!_examples) {
        MJExample *exam0 = [[MJExample alloc] init];
        exam0.header = MJExample00;
        exam0.vcClasses = @[[MJTableViewController class]];
        exam0.titles = @[@"默认", @"动画图片", @"隐藏时间", @"隐藏状态和时间", @"自定义文字", @"自定义刷新控件"];
        exam0.methods = @[@"example01", @"example02", @"example03", @"example04", @"example05", @"example06"];
        
        MJExample *exam1 = [[MJExample alloc] init];
        exam1.header = MJExample10;
        exam1.vcClasses = @[[MJTableViewController class]];
        exam1.titles = @[@"默认", @"动画图片", @"隐藏刷新状态的文字", @"全部加载完毕", @"禁止自动加载", @"自定义文字", @"加载后隐藏", @"自动回弹的上拉01", @"自动回弹的上拉02", @"自定义刷新控件(自动刷新)", @"自定义刷新控件(自动回弹)"];
        exam1.methods = @[@"example11", @"example12", @"example13", @"example14", @"example15", @"example16", @"example17", @"example18", @"example19", @"example20", @"example21"];
        
        MJExample *exam2 = [[MJExample alloc] init];
        exam2.header = MJExample20;
        exam2.vcClasses = @[MJCollectionViewController.class, MJPinHeaderCollectionViewController.class, MJHorizontalCollectionViewController.class];
        exam2.titles = @[@"上下拉刷新", @"上下拉刷新-PinHeader", @"左拉刷新"];
        exam2.methods = @[@"example31", @"example31", @"example42"];
        
        MJExample *exam3 = [[MJExample alloc] init];
        exam3.header = MJExample30;
        exam3.vcClasses = @[[MJWebViewViewController class]];
        exam3.titles = @[@"下拉刷新"];
        exam3.methods = @[@"example40"];
        
        MJExample *exam4 = [[MJExample alloc] init];
        exam4.header = MJExample40;
        exam4.vcClasses = @[[MJWKWebViewController class]];
        exam4.titles = @[@"下拉刷新"];
        exam4.methods = @[@"example41"];
        
        self.examples = @[exam0, exam1, exam2, exam3, exam4];
    }
    return _examples;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    __unsafe_unretained UITableView *tableView = self.tableView;
    
    // 下拉刷新
    tableView.mj_header= [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        // 模拟延迟加载数据,因此2秒后才调用(真实开发中,可以移除这段gcd代码)
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            // 结束刷新
            [tableView.mj_header endRefreshing];
        });
    }];
    
    // 设置自动切换透明度(在导航栏下面自动隐藏)
    tableView.mj_header.automaticallyChangeAlpha = YES;
    
    // 上拉刷新
    tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
        // 模拟延迟加载数据,因此2秒后才调用(真实开发中,可以移除这段gcd代码)
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            // 结束刷新
            [tableView.mj_footer endRefreshing];
        });
    }];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return self.examples.count;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    MJExample *exam = self.examples[section];
    return exam.titles.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID = @"example";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
    MJExample *exam = self.examples[indexPath.section];
    cell.textLabel.text = exam.titles[indexPath.row];
    
    NSInteger classRow = indexPath.row;
    if (classRow > exam.vcClasses.count - 1) {
        classRow = exam.vcClasses.count - 1;
    }
    cell.detailTextLabel.text = [NSString stringWithFormat:@"%@ - %@", exam.vcClasses[classRow], exam.methods[indexPath.row]];
    
    return cell;
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    MJExample *exam = self.examples[section];
    return exam.header;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MJExample *exam = self.examples[indexPath.section];
    NSInteger classRow = indexPath.row;
    if (classRow > exam.vcClasses.count - 1) {
        classRow = exam.vcClasses.count - 1;
    }
    UIViewController *vc = [[exam.vcClasses[classRow] alloc] init];
    vc.title = exam.titles[indexPath.row];
    [vc setValue:exam.methods[indexPath.row] forKeyPath:@"method"];
    [self.navigationController pushViewController:vc animated:YES];
}

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExampleWindow.h
================================================
//
//  MJExampleWindow.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/8/17.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MJExampleWindow : UIWindow
+ (void)show;
@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExampleWindow.m
================================================
//
//  MJExampleWindow.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/8/17.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import "MJExampleWindow.h"
#import "MJTempViewController.h"

@implementation MJExampleWindow

static UIWindow *window_;
+ (void)show
{
    window_ = [[UIWindow alloc] init];
    CGFloat width = 150;
    CGFloat x = [UIScreen mainScreen].bounds.size.width - width - 10;
    CGFloat y = 0;
    
    if (@available(iOS 11.0, *)) {
        UIEdgeInsets safeInsets = UIApplication.sharedApplication.windows.firstObject.safeAreaInsets;
        y = safeInsets.top;
    }
    
    window_.frame = CGRectMake(x, y, width, 25);
    window_.windowLevel = UIWindowLevelAlert;
    window_.hidden = NO;
    window_.alpha = 0.5;
    window_.rootViewController = [[MJTempViewController alloc] init];
    window_.backgroundColor = [UIColor clearColor];
}
@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJSingleViewController.h
================================================
//
//  MJSingleViewController.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/13.
//  Copyright © 2015年 小码哥. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MJSingleViewController : UITableViewController

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJSingleViewController.m
================================================
//
//  MJSingleViewController.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/6/13.
//  Copyright © 2015年 小码哥. All rights reserved.
//

#import "MJSingleViewController.h"
#import "MJTestViewController.h"
@import MJRefresh;

@interface MJSingleViewController ()
@property (assign, nonatomic) int count;
@end

@implementation MJSingleViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.count = 0;
    
    __unsafe_unretained typeof(self) weakSelf = self;
    __unsafe_unretained UITableView *tableView = self.tableView;
    
    tableView.mj_header= [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            weakSelf.count += 12;
            [tableView reloadData];
            [tableView.mj_header endRefreshing];
        });
    }];
    tableView.mj_header.automaticallyChangeAlpha = YES;
    
    MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            weakSelf.count += 5;
            [tableView reloadData];
            [tableView.mj_footer endRefreshing];
        });
    }];
    footer.hidden = YES;
    tableView.mj_footer = footer;
}

- (NSInteger)tableView:(nonnull UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }
    if (indexPath.row % 2 && self.navigationController) {
        cell.textLabel.text = @"push";
    } else {
        cell.textLabel.text = @"modal";
    }
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MJTestViewController *test = [[MJTestViewController alloc] init];
    if (indexPath.row % 2 && self.navigationController) {
        test.hidesBottomBarWhenPushed = YES;
        [self.navigationController pushViewController:test animated:YES];
    } else {
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:test];
        [self presentViewController:nav animated:YES completion:nil];
    }
}
@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJTempViewController.h
================================================
//
//  MJTempViewController.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/9/22.
//  Copyright © 2015年 小码哥. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MJTempViewController : UIViewController

+ (instancetype)sharedInstance;

@property (assign, nonatomic) UIStatusBarStyle statusBarStyle;
@property (assign, nonatomic) BOOL statusBarHidden;

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJTempViewController.m
================================================
//
//  MJTempViewController.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/9/22.
//  Copyright © 2015年 小码哥. All rights reserved.
//

#import "MJTempViewController.h"

@interface MJTempViewController ()

@end

@implementation MJTempViewController
#pragma mark - 单例
static id instance_;

+ (instancetype)sharedInstance
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance_ = [[self alloc] init];
    });
    return instance_;
}

+ (instancetype)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance_ = [super allocWithZone:zone];
    });
    return instance_;
}

#pragma mark - 初始化
- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.statusBarStyle = UIStatusBarStyleLightContent;
    
    self.view.backgroundColor = [UIColor clearColor];
    
    UISegmentedControl *control = [[UISegmentedControl alloc] initWithItems:@[@"示例1", @"i18n", @"示例3"]];
    control.tintColor = [UIColor orangeColor];
    control.frame = self.view.bounds;
    control.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    control.selectedSegmentIndex = 0;
    [control addTarget:self action:@selector(contorlSelect:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:control];
}

- (void)contorlSelect:(UISegmentedControl *)control
{
    UIWindow *keyWindow = [UIApplication sharedApplication].windows.firstObject;
    keyWindow.rootViewController = [keyWindow.rootViewController.storyboard instantiateViewControllerWithIdentifier:[NSString stringWithFormat:@"%zd", control.selectedSegmentIndex]];
    
    if (control.selectedSegmentIndex == 0) {
        self.statusBarStyle = UIStatusBarStyleLightContent;
        self.statusBarHidden = NO;
    } else if (control.selectedSegmentIndex == 1) {
        self.statusBarHidden = YES;
    } else if (control.selectedSegmentIndex == 2) {
        self.statusBarStyle = UIStatusBarStyleDefault;
        self.statusBarHidden = NO;
    }
}

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return self.statusBarStyle;
}

- (BOOL)prefersStatusBarHidden
{
    return self.statusBarHidden;
}

- (void)setStatusBarHidden:(BOOL)statusBarHidden
{
    _statusBarHidden = statusBarHidden;
    
    [self setNeedsStatusBarAppearanceUpdate];
}

- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle
{
    _statusBarStyle = statusBarStyle;
    
    [self setNeedsStatusBarAppearanceUpdate];
}

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Other/AppDelegate.h
================================================
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  AppDelegate.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/4.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;


@end



================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Other/AppDelegate.m
================================================
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  AppDelegate.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/4.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import "AppDelegate.h"
#import "MJExampleWindow.h"

@interface AppDelegate ()
@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    [self setupNavigationBarAppearance];
    
    return YES;
}

- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        [MJExampleWindow show];
    });
}

- (void)setupNavigationBarAppearance {
    // 1.取出设置主题的对象
    UINavigationBar *navBar = [UINavigationBar appearanceWhenContainedInInstancesOfClasses:@[UINavigationController.class]];
    
    // 2.设置导航栏的背景图片
    UIImage *backgroundImage = [UIImage imageNamed:@"NavBar64"];
    NSDictionary *titleTextAttributes = @{NSForegroundColorAttributeName : [UIColor whiteColor]};
    
    if (@available(iOS 13.0, *)) {
        UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
        appearance.backgroundImage = backgroundImage;
        appearance.backgroundImageContentMode = UIViewContentModeScaleToFill;
        appearance.titleTextAttributes = titleTextAttributes;
        
        navBar.scrollEdgeAppearance = appearance;
        navBar.standardAppearance = appearance;
    } else {
        [[UINavigationBar appearance] setBackgroundImage:backgroundImage forBarMetrics:UIBarMetricsDefault];
        // 3.标题
        [[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
    }
}

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJCollectionViewController.h
================================================
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  MJCollectionViewController.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/6.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MJCollectionViewController : UICollectionViewController

- (void)example31;

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJCollectionViewController.m
================================================
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  MJCollectionViewController.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/6.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import "MJCollectionViewController.h"
#import "MJTestViewController.h"
#import "UIViewController+Example.h"
#import "MJChiBaoziHeader.h"

@import MJRefresh;

static const CGFloat MJDuration = 2.0;
/**
 * 随机色
 */
#define MJRandomColor [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1]

@interface MJCollectionViewController()
/** 存放假数据 */
@property (strong, nonatomic) NSMutableArray *colors;
@end

@implementation MJCollectionViewController
#pragma mark - 示例
#pragma mark UICollectionView 上下拉刷新
- (void)example31
{
    __weak __typeof(self) weakSelf = self;
    
    // 下拉刷新
    [[MJRefreshNormalHeader headerWithRefreshingBlock:^{
        // 增加5条假数据
        for (int i = 0; i<10; i++) {
            [weakSelf.colors insertObject:MJRandomColor atIndex:0];
        }
        
        // 模拟延迟加载数据,因此2秒后才调用(真实开发中,可以移除这段gcd代码)
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(MJDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [weakSelf.collectionView reloadData];
            
            // 结束刷新
            [weakSelf.collectionView.mj_header endRefreshing];
        });
    }] linkTo:self.collectionView];
    self.collectionView.mj_header.isCollectionViewAnimationBug = YES;
    // 简单粗暴版本
//    [self.collectionView.mj_header setAnimationDisabled];

    // 上拉刷新
    [[[[MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
        // 增加5条假数据
        for (int i = 0; i<5; i++) {
            [weakSelf.colors addObject:MJRandomColor];
        }
        
        // 模拟延迟加载数据,因此2秒后才调用(真实开发中,可以移除这段gcd代码)
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(MJDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//            [weakSelf.collectionView reloadData];
//            [weakSelf.collectionView.mj_footer endRefreshing];
            
            [weakSelf.collectionView performBatchUpdates:^{
                [weakSelf.collectionView reloadSections:[NSIndexSet indexSetWithIndex:0]];
            } completion:^(BOOL finished) {
                // 结束刷新
                [weakSelf.collectionView.mj_footer endRefreshing];
            }];
            
        });
        
    }] setAnimationDisabled]
      autoChangeTransparency:YES]
     linkTo:self.collectionView];
    
    [self.collectionView.mj_header beginRefreshing];
}

#pragma mark - 数据相关
- (NSMutableArray *)colors
{
    if (!_colors) {
        self.colors = [NSMutableArray array];
    }
    return _colors;
}

#pragma mark - 其他

/**
 *  初始化
 */
- (id)init
{
    // UICollectionViewFlowLayout的初始化(与刷新控件无关)
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    layout.itemSize = CGSizeMake(80, 80);
    layout.sectionInset = UIEdgeInsetsMake(20, 20, 20, 20);
    layout.minimumInteritemSpacing = 20;
    layout.minimumLineSpacing = 20;
    layout.headerReferenceSize = CGSizeMake(100, 30);
    return [self initWithCollectionViewLayout:layout];
}

static NSString *const MJCollectionViewCellIdentifier = @"color";
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    MJPerformSelectorLeakWarning(
        [self performSelector:NSSelectorFromString(self.method) withObject:nil];
                                 );
    
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:MJCollectionViewCellIdentifier];
    [self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header"];
}

#pragma mark - collection数据源代理
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    // 设置尾部控件的显示和隐藏
    self.collectionView.mj_footer.hidden = self.colors.count == 0;
    return self.colors.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:MJCollectionViewCellIdentifier forIndexPath:indexPath];
    cell.backgroundColor = self.colors[indexPath.row];
    return cell;
}

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
    UICollectionReusableView *view = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"header" forIndexPath:indexPath];
    view.backgroundColor = UIColor.systemPurpleColor;
    
    return view;
}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
    MJTestViewController *test = [[MJTestViewController alloc] init];
    if (indexPath.row % 2) {
        [self.navigationController pushViewController:test animated:YES];
    } else {
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:test];
        [self presentViewController:nav animated:YES completion:nil];
    }
}
@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJHorizontalCollectionViewController.h
================================================
//
//  MJHorizontalCollectionViewController.h
//  MJRefreshExample
//
//  Created by libin14 on 2020/9/13.
//  Copyright © 2020 小码哥. All rights reserved.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface MJHorizontalCollectionViewController : UICollectionViewController

@end

NS_ASSUME_NONNULL_END


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJHorizontalCollectionViewController.m
================================================
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  MJHorizontalCollectionViewController.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/6.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import "MJHorizontalCollectionViewController.h"
#import "MJTestViewController.h"
#import "UIViewController+Example.h"
@import MJRefresh;

/**
 * 随机色
 */
#define MJRandomColor [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1]

@interface MJHorizontalCollectionViewController()
/** 存放假数据 */
@property (strong, nonatomic) NSMutableArray *colors;
@end

@implementation MJHorizontalCollectionViewController
#pragma mark - 示例
#pragma mark UICollectionView 左拉刷新

- (void)example42 {
    __weak __typeof(self) weakSelf = self;
    
    // 左拉刷新
    self.collectionView.mj_trailer = [MJRefreshNormalTrailer trailerWithRefreshingBlock:^{
        MJTestViewController *test = [[MJTestViewController alloc] init];
        [weakSelf.navigationController pushViewController:test animated:YES];
        [weakSelf.collectionView.mj_trailer endRefreshing];
    }];
}

#pragma mark - 数据相关
- (NSMutableArray *)colors {
    if (!_colors) {
        self.colors = [NSMutableArray array];
        for (int i = 0; i < 5; i++) {
            [self.colors addObject:MJRandomColor];
        }
    }
    return _colors;
}

#pragma mark - 其他

/**
 *  初始化
 */
- (instancetype)init {
    // UICollectionViewFlowLayout的初始化(与刷新控件无关)
    UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
    layout.itemSize = CGSizeMake(UIScreen.mainScreen.bounds.size.width, 200);
    layout.minimumInteritemSpacing = 0;
    layout.minimumLineSpacing = 0;
    layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
    return [self initWithCollectionViewLayout:layout];
}

static NSString *const MJCollectionViewCellIdentifier = @"color";

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    self.collectionView.frame = CGRectMake(0, 150, UIScreen.mainScreen.bounds.size.width, 200);
    self.collectionView.pagingEnabled = YES;
    self.collectionView.backgroundColor = [UIColor whiteColor];
    
    MJPerformSelectorLeakWarning([self performSelector:NSSelectorFromString(self.method) withObject:nil];);
    [self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:MJCollectionViewCellIdentifier];
}

#pragma mark - collection数据源代理
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    return self.colors.count;
}

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:MJCollectionViewCellIdentifier forIndexPath:indexPath];
    cell.backgroundColor = self.colors[indexPath.row];
    return cell;
}

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    MJTestViewController *test = [[MJTestViewController alloc] init];
    if (indexPath.row % 2) {
        [self.navigationController pushViewController:test animated:YES];
    } else {
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:test];
        [self presentViewController:nav animated:YES completion:nil];
    }
}
@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJPinHeaderCollectionViewController.swift
================================================
//
//  MJPinHeaderCollectionViewController.swift
//  MJRefreshExample
//
//  Created by Frank on 2023/9/18.
//  Copyright © 2023 小码哥. All rights reserved.
//

import UIKit

@objcMembers
class MJPinHeaderCollectionViewController: MJCollectionViewController {
    
    convenience init() {
        let pinHeaderLayout = PinHeaderFlowLayout()
        pinHeaderLayout.itemSize = CGSizeMake(80, 80)
        pinHeaderLayout.sectionInset = UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)
        pinHeaderLayout.minimumInteritemSpacing = 20
        pinHeaderLayout.minimumLineSpacing = 20
        pinHeaderLayout.headerReferenceSize = CGSize(width: 100, height: 30)
        
        self.init(collectionViewLayout: pinHeaderLayout)
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

@objcMembers
class PinHeaderFlowLayout: UICollectionViewFlowLayout {
    override var flipsHorizontallyInOppositeLayoutDirection: Bool {
        true
    }
    
    override func layoutAttributesForSupplementaryView(ofKind elementKind: String, at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
        let attributes = UICollectionViewLayoutAttributes(forSupplementaryViewOfKind: UICollectionView.elementKindSectionHeader, with: indexPath)
        // TODO: Implementation of PinHeader
        
        return attributes
    }

}


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJTableViewController.h
================================================
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  MJTableViewController.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/4.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MJTableViewController : UITableViewController

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJTableViewController.m
================================================
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  MJTableViewController.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/4.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import "MJTableViewController.h"
#import "MJTestViewController.h"
#import "UIViewController+Example.h"
@import MJRefresh;

// 自定义的header
#import "MJChiBaoZiHeader.h"
#import "MJChiBaoZiFooter.h"
#import "MJChiBaoZiFooter2.h"
#import "MJDIYHeader.h"
#import "MJDIYAutoFooter.h"
#import "MJDIYBackFooter.h"

static const CGFloat MJDuration = 0.5;
/**
 * 随机数据
 */
#define MJRandomData [NSString stringWithFormat:@"随机数据---%d", arc4random_uniform(1000000)]

@interface MJTableViewController()
/** 用来显示的假数据 */
@property (strong, nonatomic) NSMutableArray *data;
@end

@implementation MJTableViewController
#pragma mark - 示例代码
#pragma mark UITableView + 下拉刷新 默认
- (void)example01
{
    __weak __typeof(self) weakSelf = self;
    
    // 设置回调(一旦进入刷新状态就会调用这个refreshingBlock)
    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        [weakSelf loadNewData];
    }];
    
    // 马上进入刷新状态
    [self.tableView.mj_header beginRefreshing];
}

#pragma mark UITableView + 下拉刷新 动画图片
- (void)example02
{
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
    self.tableView.mj_header = [MJChiBaoZiHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
    
    // 马上进入刷新状态
    [self.tableView.mj_header beginRefreshing];
}

#pragma mark UITableView + 下拉刷新 隐藏时间
- (void)example03
{
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
    
    // 设置自动切换透明度(在导航栏下面自动隐藏)
    header.automaticallyChangeAlpha = YES;
    
    // 隐藏时间
    header.lastUpdatedTimeLabel.hidden = YES;
    
    // 马上进入刷新状态
    [header beginRefreshing];
    
    // 设置header
    self.tableView.mj_header = header;
}

#pragma mark UITableView + 下拉刷新 隐藏状态和时间
- (void)example04
{
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
    MJChiBaoZiHeader *header = [MJChiBaoZiHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
    
    // 隐藏时间
    header.lastUpdatedTimeLabel.hidden = YES;

    // 隐藏状态
    header.stateLabel.hidden = YES;
    
    // 马上进入刷新状态
    [header beginRefreshing];
    
    // 设置header
    self.tableView.mj_header = header;
}

#pragma mark UITableView + 下拉刷新 自定义文字
- (void)example05
{
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
    
    // 设置文字
    [header setTitle:@"Pull down to refresh" forState:MJRefreshStateIdle];
    [header setTitle:@"Release to refresh" forState:MJRefreshStatePulling];
    [header setTitle:@"Loading ..." forState:MJRefreshStateRefreshing];
    
    // 设置字体
    header.stateLabel.font = [UIFont systemFontOfSize:15];
    header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];

    // 设置颜色
    header.stateLabel.textColor = [UIColor redColor];
    header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
    
    // 马上进入刷新状态
    [header beginRefreshing];
    
    // 设置刷新控件
    self.tableView.mj_header = header;
}

#pragma mark UITableView + 下拉刷新 自定义刷新控件
- (void)example06
{
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
    self.tableView.mj_header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
    [self.tableView.mj_header beginRefreshing];
}

#pragma mark UITableView + 上拉刷新 默认
- (void)example11
{
    [self example01];
    
    __weak __typeof(self) weakSelf = self;
    
    // 设置回调(一旦进入刷新状态就会调用这个refreshingBlock)
    self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
        [weakSelf loadMoreData];
    }];
//    ((MJRefreshAutoFooter *)self.tableView.mj_footer).onlyRefreshPerDrag = YES;
}

#pragma mark UITableView + 上拉刷新 动画图片
- (void)example12
{
    [self example01];
    
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
    self.tableView.mj_footer = [MJChiBaoZiFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
}

#pragma mark UITableView + 上拉刷新 隐藏刷新状态的文字
- (void)example13
{
    [self example01];
    
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
    MJChiBaoZiFooter *footer = [MJChiBaoZiFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
    
    // 当上拉刷新控件出现50%时(出现一半),就会自动刷新。这个值默认是1.0(也就是上拉刷新100%出现时,才会自动刷新)
    //    footer.triggerAutomaticallyRefreshPercent = 0.5;
    
    // 隐藏刷新状态的文字
    footer.refreshingTitleHidden = YES;
    
    // 设置footer
    self.tableView.mj_footer = footer;
}

#pragma mark UITableView + 上拉刷新 全部加载完毕
- (void)example14
{
    [self example01];
    
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadLastData方法)
    self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadLastData)];
    
    // 其他
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"恢复数据加载" style:UIBarButtonItemStyleDone target:self action:@selector(reset)];
}

- (void)reset
{
    [self.tableView.mj_footer setRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
    [self.tableView.mj_footer resetNoMoreData];
}

#pragma mark UITableView + 上拉刷新 禁止自动加载
- (void)example15
{
    [self example01];
    
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
    MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
    
    // 禁止自动加载
    footer.automaticallyRefresh = NO;
    
    // 设置footer
    self.tableView.mj_footer = footer;
}

#pragma mark UITableView + 上拉刷新 自定义文字
- (void)example16
{
    [self example01];
    
    // 添加默认的上拉刷新
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
    MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
    
    // 设置文字
    [footer setTitle:@"Click or drag up to refresh" forState:MJRefreshStateIdle];
    [footer setTitle:@"Loading more ..." forState:MJRefreshStateRefreshing];
    [footer setTitle:@"No more data" forState:MJRefreshStateNoMoreData];

    // 设置字体
    footer.stateLabel.font = [UIFont systemFontOfSize:17];

    // 设置颜色
    footer.stateLabel.textColor = [UIColor blueColor];
    
    // 设置footer
    self.tableView.mj_footer = footer;
}

#pragma mark UITableView + 上拉刷新 加载后隐藏
- (void)example17
{
    [self example01];
    
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadOnceData方法)
    self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadOnceData)];
}

#pragma mark UITableView + 上拉刷新 自动回弹的上拉01
- (void)example18
{
    [self example01];
    
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
    self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
    // 设置了底部inset
    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 30, 0);
    // 忽略掉底部inset
    self.tableView.mj_footer.ignoredScrollViewContentInsetBottom = 30;
}

#pragma mark UITableView + 上拉刷新 自动回弹的上拉02
- (void)example19
{
    [self example01];
    
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadLastData方法)
    self.tableView.mj_footer = [MJChiBaoZiFooter2 footerWithRefreshingTarget:self refreshingAction:@selector(loadLastData)];
    self.tableView.mj_footer.automaticallyChangeAlpha = YES;
}

#pragma mark UITableView + 上拉刷新 自定义刷新控件(自动刷新)
- (void)example20
{
    [self example01];
    
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
    MJDIYAutoFooter *footer = [MJDIYAutoFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
    footer.autoTriggerTimes = 2;
    self.tableView.mj_footer = footer;
}

#pragma mark UITableView + 上拉刷新 自定义刷新控件(自动回弹)
- (void)example21
{
    [self example01];
    
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
    self.tableView.mj_footer = [MJDIYBackFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
}

#pragma mark - 数据处理相关
#pragma mark 下拉刷新数据
- (void)loadNewData
{
    // 1.添加假数据
    for (int i = 0; i<5; i++) {
        [self.data insertObject:MJRandomData atIndex:0];
    }
    
    // 2.模拟2秒后刷新表格UI(真实开发中,可以移除这段gcd代码)
    __weak UITableView *tableView = self.tableView;
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(MJDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        // 刷新表格
        [tableView reloadData];
        
        // 拿到当前的下拉刷新控件,结束刷新状态
        [tableView.mj_header endRefreshing];
    });
}

#pragma mark 上拉加载更多数据
- (void)loadMoreData
{
    // 1.添加假数据
    for (int i = 0; i<1; i++) {
        [self.data addObject:MJRandomData];
    }
    
    // 2.模拟2秒后刷新表格UI(真实开发中,可以移除这段gcd代码)
    __weak UITableView *tableView = self.tableView;
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(MJDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        // 刷新表格
        [tableView reloadData];
        
        // 拿到当前的上拉刷新控件,结束刷新状态
        [tableView.mj_footer endRefreshing];
    });
}

#pragma mark 加载最后一份数据
- (void)loadLastData
{
    // 1.添加假数据
    for (int i = 0; i<5; i++) {
        [self.data addObject:MJRandomData];
    }
    
    // 2.模拟2秒后刷新表格UI(真实开发中,可以移除这段gcd代码)
    __weak UITableView *tableView = self.tableView;
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(MJDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        // 刷新表格
        [tableView reloadData];
        
        // 拿到当前的上拉刷新控件,变为没有更多数据的状态
        [tableView.mj_footer endRefreshingWithNoMoreData];
    });
}

#pragma mark 只加载一次数据
- (void)loadOnceData
{
    // 1.添加假数据
    for (int i = 0; i<5; i++) {
        [self.data addObject:MJRandomData];
    }
    
    // 2.模拟2秒后刷新表格UI(真实开发中,可以移除这段gcd代码)
    __weak UITableView *tableView = self.tableView;
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(MJDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        // 刷新表格
        [tableView reloadData];
        
        // 隐藏当前的上拉刷新控件
        tableView.mj_footer.hidden = YES;
    });
}

- (NSMutableArray *)data
{
    if (!_data) {
        self.data = [NSMutableArray array];
        for (int i = 0; i<5; i++) {
            [self.data addObject:MJRandomData];
        }
    }
    return _data;
}

#pragma mark - 其他
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"];
    MJPerformSelectorLeakWarning(
        [self performSelector:NSSelectorFromString(self.method) withObject:nil];
                                 );
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.data.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }
    
    cell.textLabel.text = [NSString stringWithFormat:@"%@ - %@", indexPath.row % 2?@"push":@"modal", self.data[indexPath.row]];
    
    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    MJTestViewController *test = [[MJTestViewController alloc] init];
    if (indexPath.row % 2) {
        [self.navigationController pushViewController:test animated:YES];
    } else {
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:test];
        [self presentViewController:nav animated:YES completion:nil];
    }
}

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJTestViewController.h
================================================
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  MJTestViewController.h
//  MJRefreshExample
//
//  Created by MJ Lee on 14-5-28.
//  Copyright (c) 2014年 小码哥. All rights reserved.
//

#import <UIKit/UIKit.h>

#define MJPerformSelectorLeakWarning(Stuff) \
do { \
_Pragma("clang diagnostic push") \
_Pragma("clang diagnostic ignored \"-Warc-performSelector-leaks\"") \
Stuff; \
_Pragma("clang diagnostic pop") \
} while (0)

@interface MJTestViewController : UIViewController

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJTestViewController.m
================================================
//  代码地址: https://github.com/CoderMJLee/MJRefresh
//  MJTestViewController.m
//  MJRefreshExample
//
//  Created by MJ Lee on 14-5-28.
//  Copyright (c) 2014年 小码哥. All rights reserved.
//

#import "MJTestViewController.h"

@interface MJTestViewController ()

@end

@implementation MJTestViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.title = @"测试控制器";
    
    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"关闭" style:UIBarButtonItemStyleDone target:self action:@selector(close)];
}

- (void)close
{
    if (self.presentingViewController) {
        [self dismissViewControllerAnimated:YES completion:nil];
    } else {
        [self.navigationController popViewControllerAnimated:YES];
    }
}

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJTestViewController.xib
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" colorMatched="YES">
    <device id="retina4_7" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MJTestViewController">
            <connections>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
        </view>
    </objects>
</document>


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJWebViewViewController.h
================================================
//
//  MJWebViewViewController.h
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/12.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface MJWebViewViewController : UIViewController

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJWebViewViewController.m
================================================
//
//  MJWebViewViewController.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/12.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import "MJWebViewViewController.h"
#import "UIViewController+Example.h"
#import "MJChiBaoZiHeader.h"

@import MJRefresh;

@interface MJWebViewViewController () <UIWebViewDelegate>
@property (weak, nonatomic) IBOutlet UIWebView *webView;
@end

@implementation MJWebViewViewController
#pragma mark - 示例
- (void)example40
{
    __weak UIWebView *webView = self.webView;
    webView.delegate = self;
    
    __weak UIScrollView *scrollView = self.webView.scrollView;
    
    // 添加下拉刷新控件
    [[[MJChiBaoZiHeader headerWithRefreshingBlock:^{
            [webView reload];
        }]
         linkTo:scrollView]
        autoChangeTransparency:YES];
    
    // 如果是上拉刷新,就以此类推
    [scrollView.mj_header beginRefreshing];
}

#pragma mark - webViewDelegate
- (void)webViewDidFinishLoad:(nonnull UIWebView *)webView
{
    [self.webView.scrollView.mj_header endRefreshing];
}

#pragma mark - 其他
- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 加载页面
    [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://weibo.com/exceptions"]]];
    
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
    [self performSelector:NSSelectorFromString(self.method) withObject:nil];
#pragma clang diagnostic pop
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    
    [self.navigationController setNavigationBarHidden:YES animated:YES];
    
    [self setNeedsStatusBarAppearanceUpdate];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}

- (BOOL)prefersStatusBarHidden
{
    return YES;
}

- (IBAction)back {
    [self.navigationController popViewControllerAnimated:YES];
}

@end


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJWebViewViewController.xib
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
    <device id="retina4_7" orientation="portrait">
        <adaptation id="fullscreen"/>
    </device>
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14490.49"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <objects>
        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="MJWebViewViewController">
            <connections>
                <outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
                <outlet property="webView" destination="2Of-d4-HFt" id="PE7-tq-AIx"/>
            </connections>
        </placeholder>
        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
        <view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT">
            <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
            <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
            <subviews>
                <webView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="2Of-d4-HFt">
                    <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                    <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                </webView>
                <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="8xo-5D-MRC">
                    <rect key="frame" x="241" y="537" width="113" height="30"/>
                    <color key="backgroundColor" red="1" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <constraints>
                        <constraint firstAttribute="width" constant="113" id="2YR-NZ-hF1"/>
                        <constraint firstAttribute="height" constant="30" id="qIc-RV-DwB"/>
                    </constraints>
                    <state key="normal" title="回到上一页">
                        <color key="titleShadowColor" red="0.5" green="0.5" blue="0.5" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    </state>
                    <connections>
                        <action selector="back" destination="-1" eventType="touchUpInside" id="BG2-eT-gw7"/>
                    </connections>
                </button>
                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="注意,这不是原生界面,是个网页:http://weibo.com/excepptions" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2VR-jQ-Qn4">
                    <rect key="frame" x="146" y="459.5" width="208" height="31.5"/>
                    <color key="backgroundColor" red="0.0" green="0.0" blue="0.0" alpha="0.16" colorSpace="custom" customColorSpace="sRGB"/>
                    <constraints>
                        <constraint firstAttribute="width" constant="208" id="qkq-G9-eo2"/>
                    </constraints>
                    <fontDescription key="fontDescription" type="system" pointSize="13"/>
                    <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                    <nil key="highlightedColor"/>
                </label>
            </subviews>
            <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
            <constraints>
                <constraint firstItem="2Of-d4-HFt" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="3LR-sb-d2d"/>
                <constraint firstAttribute="bottom" secondItem="8xo-5D-MRC" secondAttribute="bottom" constant="100" id="GEd-8N-H2g"/>
                <constraint firstAttribute="trailing" secondItem="2VR-jQ-Qn4" secondAttribute="trailing" constant="21" id="JkD-lQ-2rZ"/>
                <constraint firstAttribute="trailing" secondItem="2Of-d4-HFt" secondAttribute="trailing" id="MWE-Gj-9Jb"/>
                <constraint firstAttribute="bottom" secondItem="2Of-d4-HFt" secondAttribute="bottom" id="YY5-j2-abg"/>
                <constraint firstAttribute="trailing" secondItem="8xo-5D-MRC" secondAttribute="trailing" constant="21" id="spl-mb-Eed"/>
                <constraint firstItem="8xo-5D-MRC" firstAttribute="top" secondItem="2VR-jQ-Qn4" secondAttribute="bottom" constant="46" id="zTm-ax-FFk"/>
                <constraint firstItem="2Of-d4-HFt" firstAttribute="leading" secondItem="i5M-Pr-FkT" secondAttribute="leading" id="zy2-dj-Ccd"/>
            </constraints>
        </view>
    </objects>
</document>


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/SwiftExample/MJWKWebViewController.swift
================================================
//
//  MJWKWebViewController.swift
//  MJRefreshExample
//
//  Created by Frank on 2021/3/3.
//  Copyright © 2021 小码哥. All rights reserved.
//

import UIKit
import WebKit
// 在实际的工程中, 使用以下 Import module 即可
//import MJRefresh

@objc
class MJWKWebViewController: UIViewController {
    var webView: WKWebView!
    
    func example41() {
        MJChiBaoZiHeader { [weak self] in
            self?.webView.reload()
        }.autoChangeTransparency(true)
        .link(to: webView.scrollView)
        
        webView.scrollView.mj_header?.beginRefreshing()
    }
}

// MARK: 🌈 无关例子的样式构建方法
extension MJWKWebViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        constructViews()
    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        
        navigationController?.setNavigationBarHidden(true, animated: true)
        setNeedsStatusBarAppearanceUpdate()
    }
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        
        navigationController?.setNavigationBarHidden(false, animated: true)
    }
    
    override var prefersStatusBarHidden: Bool {
        true
    }
    
    private func constructViews() {
        webView = WKWebView(frame: view.frame)
        webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
        view.addSubview(webView)
        webView.navigationDelegate = self
        
        let size = view.frame.size
        let warningLabel = UILabel(frame: CGRect(x: size.width - 210, y: size.height - 160, width: 200, height: 50))
        warningLabel.text = "注意,这不是原生界面,是个网页:http://weibo.com/excepptions"
        warningLabel.adjustsFontSizeToFitWidth = true
        warningLabel.textColor = .black
        warningLabel.backgroundColor = UIColor.lightGray.withAlphaComponent(0.3)
        warningLabel.numberOfLines = 0
        let mask: UIView.AutoresizingMask = [.flexibleRightMargin, .flexibleBottomMargin]
        warningLabel.autoresizingMask = mask
        webView.addSubview(warningLabel)
        
        let backButton = UIButton(frame: CGRect(x: size.width - 210, y: size.height - 100, width: 200, height: 50))
        backButton.setTitle("回到上一页", for: .normal)
        backButton.backgroundColor = .red
        backButton.autoresizingMask = mask
        backButton.addTarget(self, action: #selector(back), for: .touchUpInside)
        webView.addSubview(backButton)
        
        webView.load(URLRequest(url: URL(string: "http://weibo.com/exceptions")!))
        example41()
    }
    
    @objc
    func back() {
        navigationController?.popViewController(animated: true)
    }
}


extension MJWKWebViewController: WKNavigationDelegate {
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        webView.scrollView.mj_header?.endRefreshing()
    }
}


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Classes/i18n/I18NExampleViewController.swift
================================================
//
//  I18NExampleViewController.swift
//  MJRefreshExample
//
//  Created by Frank on 2021/7/5.
//  Copyright © 2021 小码哥. All rights reserved.
//
import UIKit

class I18NExampleViewController: UITableViewController {
    var languages = [
        "zh-Hans", "zh-Hant", "en", "ru", "ko", "uk"
    ]
    var customBundles = [
        "zh-Hans", "zh-Hant", "en", "ru", "ko", "uk"
    ]

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")

        MJRefreshNormalHeader {
            DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in
                guard let self = self else { return }
                self.tableView.mj_header?.endRefreshing()
            }
        }.autoChangeTransparency(true).link(to: tableView)

        MJRefreshAutoNormalFooter {
            DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in
                guard let self = self else { return }
                self.tableView.mj_footer?.endRefreshing()
            }
        }.link(to: tableView)
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 3
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return languages.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!

        cell.textLabel?.text = languages[indexPath.row]
        return cell
    }

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        switch section {
        case 0:
            return "MJRefresh 系统包或 MainBundle 中默认语言包"
        case 1:
            return "🍬自定义语言包文件(MJRefresh_i18n.strings)"
        case 2:
            return "♿️自定义语言包 bundle(CustomLanguages.bundle)"
        default:
            return nil
        }
    }

    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        switch indexPath.section {
        case 1:
            MJRefreshConfig.default.i18nFilename = "MJRefresh_i18n"
            MJRefreshConfig.default.languageCode = nil
            MJRefreshConfig.default.i18nBundle = nil
        case 2:
            MJRefreshConfig.default.i18nFilename = nil
            MJRefreshConfig.default.languageCode = nil
            MJRefreshConfig.default.i18nBundle = Bundle(path: Bundle.main.path(forResource: "CustomLanguages", ofType: "bundle")!)
        default:
            MJRefreshConfig.default.i18nFilename = nil
            MJRefreshConfig.default.languageCode = nil
            MJRefreshConfig.default.i18nBundle = nil
        }

        MJRefreshConfig.default.languageCode = languages[indexPath.row]

        let alertC = UIAlertController(title: "⚠️", message: "language changed to '\(languages[indexPath.row])'", preferredStyle: .alert)

        alertC.addAction(UIAlertAction(title: "🎉", style: .destructive))

        present(alertC, animated: true)
    }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "ipad-20x20@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "iphone-20x20@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "ipad-29x29.png",
      "scale" : "1x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "ipad-29x29@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "iphone-29x29@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "ipad-40x40@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "iphone-40x40@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "iphone-60x60@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "iphone-60x60@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "20x20",
      "idiom" : "ipad",
      "filename" : "ipad-20x20.png",
      "scale" : "1x"
    },
    {
      "size" : "20x20",
      "idiom" : "ipad",
      "filename" : "iphone-20x20@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "ipad",
      "filename" : "ipad-29x29-1.png",
      "scale" : "1x"
    },
    {
      "size" : "29x29",
      "idiom" : "ipad",
      "filename" : "iphone-29x29@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "ipad",
      "filename" : "ipad-40x40.png",
      "scale" : "1x"
    },
    {
      "size" : "40x40",
      "idiom" : "ipad",
      "filename" : "iphone-40x40@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "76x76",
      "idiom" : "ipad",
      "filename" : "ipad-76x76.png",
      "scale" : "1x"
    },
    {
      "size" : "76x76",
      "idiom" : "ipad",
      "filename" : "ipad-76x76@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "83.5x83.5",
      "idiom" : "ipad",
      "filename" : "ipad-83.5x83.5@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "1024x1024",
      "idiom" : "ios-marketing",
      "filename" : "ios-marketing-1024x1024.png",
      "scale" : "1x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/Contents.json
================================================
{
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0001.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__0001@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00010.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00010@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00011.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00011@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00012.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00012@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00013.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00013@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00014.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00014@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00015.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00015@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00016.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00016@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00017.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00017@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00018.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00018@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00019.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00019@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0002.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__0002@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00020.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00020@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00021.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00021@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00022.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00022@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00023.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00023@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00024.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00024@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00025.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00025@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00026.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00026@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00027.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00027@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00028.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00028@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00029.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00029@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0003.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__0003@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00030.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00030@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00031.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00031@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00032.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00032@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00033.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00033@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00034.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00034@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00035.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00035@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00036.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00036@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00037.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00037@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00038.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00038@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00039.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00039@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0004.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__0004@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00040.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00040@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00041.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00041@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00042.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00042@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00043.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00043@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00044.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00044@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00045.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00045@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00046.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00046@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00047.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00047@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00048.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00048@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00049.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00049@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0005.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__0005@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00050.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00050@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00051.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00051@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00052.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00052@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00053.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00053@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00054.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00054@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00055.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00055@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00056.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00056@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00057.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00057@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00058.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00058@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00059.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00059@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0006.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__0006@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00060.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__00060@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0007.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__0007@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0008.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__0008@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0009.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_anim__0009@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_loading_01.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_loading_01@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_loading_02.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_loading_02@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_loading_03.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "dropdown_loading_03@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/MJRefresh.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "MJRefresh.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/NavBar.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "NavBar@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/NavBar64.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "scale" : "2x",
      "filename" : "NavBar64@2x.png"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/logo.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "logo.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "logo@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}

================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>MJRefresh</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>1</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>NSAppTransportSecurity</key>
	<dict>
		<key>NSAllowsArbitraryLoads</key>
		<true/>
	</dict>
	<key>UILaunchStoryboardName</key>
	<string>LaunchScreen</string>
	<key>UIMainStoryboardFile</key>
	<string>Main</string>
	<key>UIRequiredDeviceCapabilities</key>
	<array>
		<string>armv7</string>
	</array>
	<key>UISupportedInterfaceOrientations</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
	<key>UISupportedInterfaceOrientations~ipad</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
</dict>
</plist>


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/MJRefreshExample-Bridging-Header.h
================================================
//
//  Use this file to import your target's public headers that you would like to expose to Swift.
//

#import "MJChiBaoZiHeader.h"
#import "MJCollectionViewController.h"


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/PrefixHeader.pch
================================================
//
//  PrefixHeader.pch
//  MJRefreshExample
//
//  Created by MJ Lee on 15/9/22.
//  Copyright © 2015年 小码哥. All rights reserved.
//

#ifndef PrefixHeader_pch
#define PrefixHeader_pch
#import "MJTempViewController.h"
#endif /* PrefixHeader_pch */


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample/main.m
================================================
//
//  main.m
//  MJRefreshExample
//
//  Created by MJ Lee on 15/3/4.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}


================================================
FILE: Examples/MJRefreshExample/MJRefreshExample.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 50;
	objects = {

/* Begin PBXBuildFile section */
		0133FBBF2693FA8E00E98F66 /* CustomLanguages.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0133FBBE2693FA8E00E98F66 /* CustomLanguages.bundle */; };
		013557022AB7F252001BB573 /* MJPinHeaderCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 013557012AB7F252001BB573 /* MJPinHeaderCollectionViewController.swift */; };
		018C0838274787B6002D968E /* MJRefresh.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 018C083427478732002D968E /* MJRefresh.framework */; };
		018C0839274787B6002D968E /* MJRefresh.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 018C083427478732002D968E /* MJRefresh.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
		0193FF132692E99500B52B11 /* I18NExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0193FF122692E99500B52B11 /* I18NExampleViewController.swift */; };
		0193FF162692F8EB00B52B11 /* MJRefresh_i18n.strings in Resources */ = {isa = PBXBuildFile; fileRef = 0193FF182692F8EB00B52B11 /* MJRefresh_i18n.strings */; };
		01A5EB2B25EF62B80091554E /* MJWKWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A5EB2A25EF62B80091554E /* MJWKWebViewController.swift */; };
		2D9BEB091BB15F4A00AED473 /* UIViewController+Example.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEAE01BB15F4A00AED473 /* UIViewController+Example.m */; };
		2D9BEB0A1BB15F4A00AED473 /* MJChiBaoZiFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEAE31BB15F4A00AED473 /* MJChiBaoZiFooter.m */; };
		2D9BEB0B1BB15F4A00AED473 /* MJChiBaoZiFooter2.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEAE51BB15F4A00AED473 /* MJChiBaoZiFooter2.m */; };
		2D9BEB0C1BB15F4A00AED473 /* MJChiBaoZiHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEAE71BB15F4A00AED473 /* MJChiBaoZiHeader.m */; };
		2D9BEB0D1BB15F4A00AED473 /* MJDIYAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEAE91BB15F4A00AED473 /* MJDIYAutoFooter.m */; };
		2D9BEB0E1BB15F4A00AED473 /* MJDIYBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEAEB1BB15F4A00AED473 /* MJDIYBackFooter.m */; };
		2D9BEB0F1BB15F4A00AED473 /* MJDIYHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEAED1BB15F4A00AED473 /* MJDIYHeader.m */; };
		2D9BEB101BB15F4A00AED473 /* MJExample.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEAF01BB15F4A00AED473 /* MJExample.m */; };
		2D9BEB111BB15F4A00AED473 /* MJExampleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEAF21BB15F4A00AED473 /* MJExampleViewController.m */; };
		2D9BEB121BB15F4A00AED473 /* MJExampleWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEAF41BB15F4A00AED473 /* MJExampleWindow.m */; };
		2D9BEB141BB15F4A00AED473 /* MJSingleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEAF81BB15F4A00AED473 /* MJSingleViewController.m */; };
		2D9BEB151BB15F4A00AED473 /* MJTempViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEAFA1BB15F4A00AED473 /* MJTempViewController.m */; };
		2D9BEB161BB15F4A00AED473 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEAFD1BB15F4A00AED473 /* AppDelegate.m */; };
		2D9BEB171BB15F4A00AED473 /* MJCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEB001BB15F4A00AED473 /* MJCollectionViewController.m */; };
		2D9BEB181BB15F4A00AED473 /* MJTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEB021BB15F4A00AED473 /* MJTableViewController.m */; };
		2D9BEB191BB15F4A00AED473 /* MJTestViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEB041BB15F4A00AED473 /* MJTestViewController.m */; };
		2D9BEB1A1BB15F4A00AED473 /* MJTestViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2D9BEB051BB15F4A00AED473 /* MJTestViewController.xib */; };
		2D9BEB1B1BB15F4A00AED473 /* MJWebViewViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BEB071BB15F4A00AED473 /* MJWebViewViewController.m */; };
		2D9BEB1C1BB15F4A00AED473 /* MJWebViewViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2D9BEB081BB15F4A00AED473 /* MJWebViewViewController.xib */; };
		2DA7F92B1AA6B4C4005627AB /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DA7F92A1AA6B4C4005627AB /* main.m */; };
		2DA7F9341AA6B4C4005627AB /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2DA7F9321AA6B4C4005627AB /* Main.storyboard */; };
		2DA7F9361AA6B4C4005627AB /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 2DA7F9351AA6B4C4005627AB /* Images.xcassets */; };
		2DA7F9391AA6B4C4005627AB /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2DA7F9371AA6B4C4005627AB /* LaunchScreen.xib */; };
		2DA7F9451AA6B4C4005627AB /* MJRefreshExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DA7F9441AA6B4C4005627AB /* MJRefreshExampleTests.m */; };
		6B8FB1A9250E610D00AF64B7 /* MJHorizontalCollectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B8FB1A8250E610D00AF64B7 /* MJHorizontalCollectionViewController.m */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
		018C083327478732002D968E /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = 018C082F27478732002D968E /* MJRefresh.xcodeproj */;
			proxyType = 2;
			remoteGlobalIDString = 2D9DF4521F7CE29B0042D6DD;
			remoteInfo = MJRefresh;
		};
		2DA7F93F1AA6B4C4005627AB /* PBXContainerItemProxy */ = {
			isa = PBXContainerItemProxy;
			containerPortal = 2DA7F91D1AA6B4C4005627AB /* Project object */;
			proxyType = 1;
			remoteGlobalIDString = 2DA7F9241AA6B4C4005627AB;
			remoteInfo = MJRefreshExample;
		};
/* End PBXContainerItemProxy section */

/* Begin PBXCopyFilesBuildPhase section */
		2D9DF3EC1F7CD8F50042D6DD /* Embed Frameworks */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 2147483647;
			dstPath = "";
			dstSubfolderSpec = 10;
			files = (
				018C0839274787B6002D968E /* MJRefresh.framework in Embed Frameworks */,
			);
			name = "Embed Frameworks";
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
		012CECBB2CF80CF8002C71E3 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/MJRefresh_i18n.strings; sourceTree = "<group>"; };
		0133FBB82693F7E200E98F66 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MJRefresh_i18n.strings"; sourceTree = "<group>"; };
		0133FBB92693F7EA00E98F66 /* zh-Hant */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hant"; path = "zh-Hant.lproj/MJRefresh_i18n.strings"; sourceTree = "<group>"; };
		0133FBBB2693F80400E98F66 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/MJRefresh_i18n.strings; sourceTree = "<group>"; };
		0133FBBC2693F81700E98F66 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/MJRefresh_i18n.strings; sourceTree = "<group>"; };
		0133FBBD2693F81F00E98F66 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/MJRefresh_i18n.strings; sourceTree = "<group>"; };
		0133FBBE2693FA8E00E98F66 /* CustomLanguages.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = CustomLanguages.bundle; sourceTree = "<group>"; };
		013557012AB7F252001BB573 /* MJPinHeaderCollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MJPinHeaderCollectionViewController.swift; sourceTree = "<group>"; };
		018C082F27478732002D968E /* MJRefresh.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = MJRefresh.xcodeproj; path = ../../MJRefresh.xcodeproj; sourceTree = "<group>"; };
		0193FF122692E99500B52B11 /* I18NExampleViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = I18NExampleViewController.swift; sourceTree = "<group>"; };
		0193FF172692F8EB00B52B11 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MJRefresh_i18n.strings; sourceTree = "<group>"; };
		01A5EB2925EF62B80091554E /* MJRefreshExample-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MJRefreshExample-Bridging-Header.h"; sourceTree = "<group>"; };
		01A5EB2A25EF62B80091554E /* MJWKWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MJWKWebViewController.swift; sourceTree = "<group>"; };
		2D9BEADF1BB15F4A00AED473 /* UIViewController+Example.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIViewController+Example.h"; sourceTree = "<group>"; };
		2D9BEAE01BB15F4A00AED473 /* UIViewController+Example.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIViewController+Example.m"; sourceTree = "<group>"; };
		2D9BEAE21BB15F4A00AED473 /* MJChiBaoZiFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJChiBaoZiFooter.h; sourceTree = "<group>"; };
		2D9BEAE31BB15F4A00AED473 /* MJChiBaoZiFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJChiBaoZiFooter.m; sourceTree = "<group>"; };
		2D9BEAE41BB15F4A00AED473 /* MJChiBaoZiFooter2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJChiBaoZiFooter2.h; sourceTree = "<group>"; };
		2D9BEAE51BB15F4A00AED473 /* MJChiBaoZiFooter2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJChiBaoZiFooter2.m; sourceTree = "<group>"; };
		2D9BEAE61BB15F4A00AED473 /* MJChiBaoZiHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJChiBaoZiHeader.h; sourceTree = "<group>"; };
		2D9BEAE71BB15F4A00AED473 /* MJChiBaoZiHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJChiBaoZiHeader.m; sourceTree = "<group>"; };
		2D9BEAE81BB15F4A00AED473 /* MJDIYAutoFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJDIYAutoFooter.h; sourceTree = "<group>"; };
		2D9BEAE91BB15F4A00AED473 /* MJDIYAutoFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJDIYAutoFooter.m; sourceTree = "<group>"; };
		2D9BEAEA1BB15F4A00AED473 /* MJDIYBackFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJDIYBackFooter.h; sourceTree = "<group>"; };
		2D9BEAEB1BB15F4A00AED473 /* MJDIYBackFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJDIYBackFooter.m; sourceTree = "<group>"; };
		2D9BEAEC1BB15F4A00AED473 /* MJDIYHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJDIYHeader.h; sourceTree = "<group>"; };
		2D9BEAED1BB15F4A00AED473 /* MJDIYHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJDIYHeader.m; sourceTree = "<group>"; };
		2D9BEAEF1BB15F4A00AED473 /* MJExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJExample.h; sourceTree = "<group>"; };
		2D9BEAF01BB15F4A00AED473 /* MJExample.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJExample.m; sourceTree = "<group>"; };
		2D9BEAF11BB15F4A00AED473 /* MJExampleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJExampleViewController.h; sourceTree = "<group>"; };
		2D9BEAF21BB15F4A00AED473 /* MJExampleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJExampleViewController.m; sourceTree = "<group>"; };
		2D9BEAF31BB15F4A00AED473 /* MJExampleWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJExampleWindow.h; sourceTree = "<group>"; };
		2D9BEAF41BB15F4A00AED473 /* MJExampleWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJExampleWindow.m; sourceTree = "<group>"; };
		2D9BEAF71BB15F4A00AED473 /* MJSingleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJSingleViewController.h; sourceTree = "<group>"; };
		2D9BEAF81BB15F4A00AED473 /* MJSingleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJSingleViewController.m; sourceTree = "<group>"; };
		2D9BEAF91BB15F4A00AED473 /* MJTempViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJTempViewController.h; sourceTree = "<group>"; };
		2D9BEAFA1BB15F4A00AED473 /* MJTempViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJTempViewController.m; sourceTree = "<group>"; };
		2D9BEAFC1BB15F4A00AED473 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
		2D9BEAFD1BB15F4A00AED473 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
		2D9BEAFF1BB15F4A00AED473 /* MJCollectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJCollectionViewController.h; sourceTree = "<group>"; };
		2D9BEB001BB15F4A00AED473 /* MJCollectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJCollectionViewController.m; sourceTree = "<group>"; };
		2D9BEB011BB15F4A00AED473 /* MJTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJTableViewController.h; sourceTree = "<group>"; };
		2D9BEB021BB15F4A00AED473 /* MJTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJTableViewController.m; sourceTree = "<group>"; };
		2D9BEB031BB15F4A00AED473 /* MJTestViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJTestViewController.h; sourceTree = "<group>"; };
		2D9BEB041BB15F4A00AED473 /* MJTestViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJTestViewController.m; sourceTree = "<group>"; };
		2D9BEB051BB15F4A00AED473 /* MJTestViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MJTestViewController.xib; sourceTree = "<group>"; };
		2D9BEB061BB15F4A00AED473 /* MJWebViewViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJWebViewViewController.h; sourceTree = "<group>"; };
		2D9BEB071BB15F4A00AED473 /* MJWebViewViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJWebViewViewController.m; sourceTree = "<group>"; };
		2D9BEB081BB15F4A00AED473 /* MJWebViewViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MJWebViewViewController.xib; sourceTree = "<group>"; };
		2DA7F9251AA6B4C4005627AB /* MJRefreshExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MJRefreshExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
		2DA7F9291AA6B4C4005627AB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		2DA7F92A1AA6B4C4005627AB /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
		2DA7F9331AA6B4C4005627AB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
		2DA7F9351AA6B4C4005627AB /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
		2DA7F9381AA6B4C4005627AB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
		2DA7F93E1AA6B4C4005627AB /* MJRefreshExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MJRefreshExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
		2DA7F9431AA6B4C4005627AB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
		2DA7F9441AA6B4C4005627AB /* MJRefreshExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MJRefreshExampleTests.m; sourceTree = "<group>"; };
		2DAA837B1BB1685300B62152 /* PrefixHeader.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = "<group>"; };
		6B8FB1A7250E610D00AF64B7 /* MJHorizontalCollectionViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MJHorizontalCollectionViewController.h; sourceTree = "<group>"; };
		6B8FB1A8250E610D00AF64B7 /* MJHorizontalCollectionViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MJHorizontalCollectionViewController.m; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		2DA7F9221AA6B4C4005627AB /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				018C0838274787B6002D968E /* MJRefresh.framework in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		2DA7F93B1AA6B4C4005627AB /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		018C083027478732002D968E /* Products */ = {
			isa = PBXGroup;
			children = (
				018C083427478732002D968E /* MJRefresh.framework */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		018C0836274787B6002D968E /* Frameworks */ = {
			isa = PBXGroup;
			children = (
			);
			name = Frameworks;
			sourceTree = "<group>";
		};
		0193FF112692E86200B52B11 /* i18n */ = {
			isa = PBXGroup;
			children = (
				0193FF122692E99500B52B11 /* I18NExampleViewController.swift */,
				0193FF182692F8EB00B52B11 /* MJRefresh_i18n.strings */,
				0133FBBE2693FA8E00E98F66 /* CustomLanguages.bundle */,
			);
			path = i18n;
			sourceTree = "<group>";
		};
		01A5EB2825EF62930091554E /* SwiftExample */ = {
			isa = PBXGroup;
			children = (
				01A5EB2A25EF62B80091554E /* MJWKWebViewController.swift */,
			);
			path = SwiftExample;
			sourceTree = "<group>";
		};
		2D9BEADE1BB15F4A00AED473 /* Category */ = {
			isa = PBXGroup;
			children = (
				2D9BEADF1BB15F4A00AED473 /* UIViewController+Example.h */,
				2D9BEAE01BB15F4A00AED473 /* UIViewController+Example.m */,
			);
			path = Category;
			sourceTree = "<group>";
		};
		2D9BEAE11BB15F4A00AED473 /* DIY */ = {
			isa = PBXGroup;
			children = (
				2D9BEAE21BB15F4A00AED473 /* MJChiBaoZiFooter.h */,
				2D9BEAE31BB15F4A00AED473 /* MJChiBaoZiFooter.m */,
				2D9BEAE41BB15F4A00AED473 /* MJChiBaoZiFooter2.h */,
				2D9BEAE51BB15F4A00AED473 /* MJChiBaoZiFooter2.m */,
				2D9BEAE61BB15F4A00AED473 /* MJChiBaoZiHeader.h */,
				2D9BEAE71BB15F4A00AED473 /* MJChiBaoZiHeader.m */,
				2D9BEAE81BB15F4A00AED473 /* MJDIYAutoFooter.h */,
				2D9BEAE91BB15F4A00AED473 /* MJDIYAutoFooter.m */,
				2D9BEAEA1BB15F4A00AED473 /* MJDIYBackFooter.h */,
				2D9BEAEB1BB15F4A00AED473 /* MJDIYBackFooter.m */,
				2D9BEAEC1BB15F4A00AED473 /* MJDIYHeader.h */,
				2D9BEAED1BB15F4A00AED473 /* MJDIYHeader.m */,
			);
			path = DIY;
			sourceTree = "<group>";
		};
		2D9BEAEE1BB15F4A00AED473 /* First */ = {
			isa = PBXGroup;
			children = (
				2D9BEAEF1BB15F4A00AED473 /* MJExample.h */,
				2D9BEAF01BB15F4A00AED473 /* MJExample.m */,
				2D9BEAF11BB15F4A00AED473 /* MJExampleViewController.h */,
				2D9BEAF21BB15F4A00AED473 /* MJExampleViewController.m */,
				2D9BEAF31BB15F4A00AED473 /* MJExampleWindow.h */,
				2D9BEAF41BB15F4A00AED473 /* MJExampleWindow.m */,
				2D9BEAF71BB15F4A00AED473 /* MJSingleViewController.h */,
				2D9BEAF81BB15F4A00AED473 /* MJSingleViewController.m */,
				2D9BEAF91BB15F4A00AED473 /* MJTempViewController.h */,
				2D9BEAFA1BB15F4A00AED473 /* MJTempViewController.m */,
			);
			path = First;
			sourceTree = "<group>";
		};
		2D9BEAFB1BB15F4A00AED473 /* Other */ = {
			isa = PBXGroup;
			children = (
				2D9BEAFC1BB15F4A00AED473 /* AppDelegate.h */,
				2D9BEAFD1BB15F4A00AED473 /* AppDelegate.m */,
			);
			path = Other;
			sourceTree = "<group>";
		};
		2D9BEAFE1BB15F4A00AED473 /* Second */ = {
			isa = PBXGroup;
			children = (
				2D9BEAFF1BB15F4A00AED473 /* MJCollectionViewController.h */,
				2D9BEB001BB15F4A00AED473 /* MJCollectionViewController.m */,
				013557012AB7F252001BB573 /* MJPinHeaderCollectionViewController.swift */,
				6B8FB1A7250E610D00AF64B7 /* MJHorizontalCollectionViewController.h */,
				6B8FB1A8250E610D00AF64B7 /* MJHorizontalCollectionViewController.m */,
				2D9BEB011BB15F4A00AED473 /* MJTableViewController.h */,
				2D9BEB021BB15F4A00AED473 /* MJTableViewController.m */,
				2D9BEB031BB15F4A00AED473 /* MJTestViewController.h */,
				2D9BEB041BB15F4A00AED473 /* MJTestViewController.m */,
				2D9BEB051BB15F4A00AED473 /* MJTestViewController.xib */,
				2D9BEB061BB15F4A00AED473 /* MJWebViewViewController.h */,
				2D9BEB071BB15F4A00AED473 /* MJWebViewViewController.m */,
				2D9BEB081BB15F4A00AED473 /* MJWebViewViewController.xib */,
			);
			path = Second;
			sourceTree = "<group>";
		};
		2DA7F91C1AA6B4C4005627AB = {
			isa = PBXGroup;
			children = (
				018C082F27478732002D968E /* MJRefresh.xcodeproj */,
				2DA7F9271AA6B4C4005627AB /* MJRefreshExample */,
				2DA7F9411AA6B4C4005627AB /* MJRefreshExampleTests */,
				2DA7F9261AA6B4C4005627AB /* Products */,
				018C0836274787B6002D968E /* Frameworks */,
			);
			sourceTree = "<group>";
		};
		2DA7F9261AA6B4C4005627AB /* Products */ = {
			isa = PBXGroup;
			children = (
				2DA7F9251AA6B4C4005627AB /* MJRefreshExample.app */,
				2DA7F93E1AA6B4C4005627AB /* MJRefreshExampleTests.xctest */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		2DA7F9271AA6B4C4005627AB /* MJRefreshExample */ = {
			isa = PBXGroup;
			children = (
				2DA7F94E1AA6B51C005627AB /* Classes */,
				01A5EB2925EF62B80091554E /* MJRefreshExample-Bridging-Header.h */,
				2DA7F9281AA6B4C4005627AB /* Supporting Files */,
			);
			path = MJRefreshExample;
			sourceTree = "<group>";
		};
		2DA7F9281AA6B4C4005627AB /* Supporting Files */ = {
			isa = PBXGroup;
			children = (
				2DA7F9321AA6B4C4005627AB /* Main.storyboard */,
				2DA7F9351AA6B4C4005627AB /* Images.xcassets */,
				2DA7F9371AA6B4C4005627AB /* LaunchScreen.xib */,
				2DA7F9291AA6B4C4005627AB /* Info.plist */,
				2DA7F92A1AA6B4C4005627AB /* main.m */,
				2DAA837B1BB1685300B62152 /* PrefixHeader.pch */,
			);
			name = "Supporting Files";
			sourceTree = "<group>";
		};
		2DA7F9411AA6B4C4005627AB /* MJRefreshExampleTests */ = {
			isa = PBXGroup;
			children = (
				2DA7F9441AA6B4C4005627AB /* MJRefreshExampleTests.m */,
				2DA7F9421AA6B4C4005627AB /* Supporting Files */,
			);
			path = MJRefreshExampleTests;
			sourceTree = "<group>";
		};
		2DA7F9421AA6B4C4005627AB /* Supporting Files */ = {
			isa = PBXGroup;
			children = (
				2DA7F9431AA6B4C4005627AB /* Info.plist */,
			);
			name = "Supporting Files";
			sourceTree = "<group>";
		};
		2DA7F94E1AA6B51C005627AB /* Classes */ = {
			isa = PBXGroup;
			children = (
				2D9BEADE1BB15F4A00AED473 /* Category */,
				2D9BEAFB1BB15F4A00AED473 /* Other */,
				2D9BEAE11BB15F4A00AED473 /* DIY */,
				2D9BEAEE1BB15F4A00AED473 /* First */,
				2D9BEAFE1BB15F4A00AED473 /* Second */,
				0193FF112692E86200B52B11 /* i18n */,
				01A5EB2825EF62930091554E /* SwiftExample */,
			);
			path = Classes;
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		2DA7F9241AA6B4C4005627AB /* MJRefreshExample */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 2DA7F9481AA6B4C4005627AB /* Build configuration list for PBXNativeTarget "MJRefreshExample" */;
			buildPhases = (
				2DA7F9211AA6B4C4005627AB /* Sources */,
				2DA7F9221AA6B4C4005627AB /* Frameworks */,
				2DA7F9231AA6B4C4005627AB /* Resources */,
				2D9DF3EC1F7CD8F50042D6DD /* Embed Frameworks */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = MJRefreshExample;
			productName = MJRefreshExample;
			productReference = 2DA7F9251AA6B4C4005627AB /* MJRefreshExample.app */;
			productType = "com.apple.product-type.application";
		};
		2DA7F93D1AA6B4C4005627AB /* MJRefreshExampleTests */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 2DA7F94B1AA6B4C4005627AB /* Build configuration list for PBXNativeTarget "MJRefreshExampleTests" */;
			buildPhases = (
				2DA7F93A1AA6B4C4005627AB /* Sources */,
				2DA7F93B1AA6B4C4005627AB /* Frameworks */,
				2DA7F93C1AA6B4C4005627AB /* Resources */,
			);
			buildRules = (
			);
			dependencies = (
				2DA7F9401AA6B4C4005627AB /* PBXTargetDependency */,
			);
			name = MJRefreshExampleTests;
			productName = MJRefreshExampleTests;
			productReference = 2DA7F93E1AA6B4C4005627AB /* MJRefreshExampleTests.xctest */;
			productType = "com.apple.product-type.bundle.unit-test";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		2DA7F91D1AA6B4C4005627AB /* Project object */ = {
			isa = PBXProject;
			attributes = {
				CLASSPREFIX = MJ;
				LastUpgradeCheck = 1220;
				ORGANIZATIONNAME = "小码哥";
				TargetAttributes = {
					2DA7F9241AA6B4C4005627AB = {
						CreatedOnToolsVersion = 6.1;
						LastSwiftMigration = 1220;
					};
					2DA7F93D1AA6B4C4005627AB = {
						CreatedOnToolsVersion = 6.1;
						TestTargetID = 2DA7F9241AA6B4C4005627AB;
					};
				};
			};
			buildConfigurationList = 2DA7F9201AA6B4C4005627AB /* Build configuration list for PBXProject "MJRefreshExample" */;
			compatibilityVersion = "Xcode 9.3";
			developmentRegion = en;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
				"zh-Hans",
				"zh-Hant",
				ru,
				uk,
				ko,
				ar,
			);
			mainGroup = 2DA7F91C1AA6B4C4005627AB;
			productRefGroup = 2DA7F9261AA6B4C4005627AB /* Products */;
			projectDirPath = "";
			projectReferences = (
				{
					ProductGroup = 018C083027478732002D968E /* Products */;
					ProjectRef = 018C082F27478732002D968E /* MJRefresh.xcodeproj */;
				},
			);
			projectRoot = "";
			targets = (
				2DA7F9241AA6B4C4005627AB /* MJRefreshExample */,
				2DA7F93D1AA6B4C4005627AB /* MJRefreshExampleTests */,
			);
		};
/* End PBXProject section */

/* Begin PBXReferenceProxy section */
		018C083427478732002D968E /* MJRefresh.framework */ = {
			isa = PBXReferenceProxy;
			fileType = wrapper.framework;
			path = MJRefresh.framework;
			remoteRef = 018C083327478732002D968E /* PBXContainerItemProxy */;
			sourceTree = BUILT_PRODUCTS_DIR;
		};
/* End PBXReferenceProxy section */

/* Begin PBXResourcesBuildPhase section */
		2DA7F9231AA6B4C4005627AB /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				0133FBBF2693FA8E00E98F66 /* CustomLanguages.bundle in Resources */,
				2DA7F9341AA6B4C4005627AB /* Main.storyboard in Resources */,
				2D9BEB1C1BB15F4A00AED473 /* MJWebViewViewController.xib in Resources */,
				2DA7F9391AA6B4C4005627AB /* LaunchScreen.xib in Resources */,
				0193FF162692F8EB00B52B11 /* MJRefresh_i18n.strings in Resources */,
				2D9BEB1A1BB15F4A00AED473 /* MJTestViewController.xib in Resources */,
				2DA7F9361AA6B4C4005627AB /* Images.xcassets in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		2DA7F93C1AA6B4C4005627AB /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		2DA7F9211AA6B4C4005627AB /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				2D9BEB0F1BB15F4A00AED473 /* MJDIYHeader.m in Sources */,
				2D9BEB181BB15F4A00AED473 /* MJTableViewController.m in Sources */,
				2D9BEB0A1BB15F4A00AED473 /* MJChiBaoZiFooter.m in Sources */,
				2D9BEB121BB15F4A00AED473 /* MJExampleWindow.m in Sources */,
				0193FF132692E99500B52B11 /* I18NExampleViewController.swift in Sources */,
				2D9BEB0E1BB15F4A00AED473 /* MJDIYBackFooter.m in Sources */,
				2D9BEB161BB15F4A00AED473 /* AppDelegate.m in Sources */,
				2D9BEB141BB15F4A00AED473 /* MJSingleViewController.m in Sources */,
				2D9BEB0D1BB15F4A00AED473 /* MJDIYAutoFooter.m in Sources */,
				2D9BEB1B1BB15F4A00AED473 /* MJWebViewViewController.m in Sources */,
				2D9BEB101BB15F4A00AED473 /* MJExample.m in Sources */,
				01A5EB2B25EF62B80091554E /* MJWKWebViewController.swift in Sources */,
				2DA7F92B1AA6B4C4005627AB /* main.m in Sources */,
				2D9BEB091BB15F4A00AED473 /* UIViewController+Example.m in Sources */,
				6B8FB1A9250E610D00AF64B7 /* MJHorizontalCollectionViewController.m in Sources */,
				2D9BEB111BB15F4A00AED473 /* MJExampleViewController.m in Sources */,
				013557022AB7F252001BB573 /* MJPinHeaderCollectionViewController.swift in Sources */,
				2D9BEB0C1BB15F4A00AED473 /* MJChiBaoZiHeader.m in Sources */,
				2D9BEB191BB15F4A00AED473 /* MJTestViewController.m in Sources */,
				2D9BEB151BB15F4A00AED473 /* MJTempViewController.m in Sources */,
				2D9BEB171BB15F4A00AED473 /* MJCollectionViewController.m in Sources */,
				2D9BEB0B1BB15F4A00AED473 /* MJChiBaoZiFooter2.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
		2DA7F93A1AA6B4C4005627AB /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				2DA7F9451AA6B4C4005627AB /* MJRefreshExampleTests.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXTargetDependency section */
		2DA7F9401AA6B4C4005627AB /* PBXTargetDependency */ = {
			isa = PBXTargetDependency;
			target = 2DA7F9241AA6B4C4005627AB /* MJRefreshExample */;
			targetProxy = 2DA7F93F1AA6B4C4005627AB /* PBXContainerItemProxy */;
		};
/* End PBXTargetDependency section */

/* Begin PBXVariantGroup section */
		0193FF182692F8EB00B52B11 /* MJRefresh_i18n.strings */ = {
			isa = PBXVariantGroup;
			children = (
				0193FF172692F8EB00B52B11 /* en */,
				0133FBB82693F7E200E98F66 /* zh-Hans */,
				0133FBB92693F7EA00E98F66 /* zh-Hant */,
				0133FBBB2693F80400E98F66 /* ru */,
				0133FBBC2693F81700E98F66 /* uk */,
				0133FBBD2693F81F00E98F66 /* ko */,
				012CECBB2CF80CF8002C71E3 /* ar */,
			);
			name = MJRefresh_i18n.strings;
			sourceTree = "<group>";
		};
		2DA7F9321AA6B4C4005627AB /* Main.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				2DA7F9331AA6B4C4005627AB /* Base */,
			);
			name = Main.storyboard;
			sourceTree = "<group>";
		};
		2DA7F9371AA6B4C4005627AB /* LaunchScreen.xib */ = {
			isa = PBXVariantGroup;
			children = (
				2DA7F9381AA6B4C4005627AB /* Base */,
			);
			name = LaunchScreen.xib;
			sourceTree = "<group>";
		};
/* End PBXVariantGroup section */

/* Begin XCBuildConfiguration section */
		2DA7F9461AA6B4C4005627AB /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
			};
			name = Debug;
		};
		2DA7F9471AA6B4C4005627AB /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = YES;
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 9.0;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
		2DA7F9491AA6B4C4005627AB /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CLANG_ENABLE_MODULES = YES;
				CODE_SIGN_IDENTITY = "iPhone Developer";
				DEVELOPMENT_TEAM = "";
				GCC_PREFIX_HEADER = MJRefreshExample/PrefixHeader.pch;
				INFOPLIST_FILE = MJRefreshExample/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				PRODUCT_BUNDLE_IDENTIFIER = com.mj.MJRefresh;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_OBJC_BRIDGING_HEADER = "MJRefreshExample/MJRefreshExample-Bridging-Header.h";
				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
				SWIFT_VERSION = 5.0;
			};
			name = Debug;
		};
		2DA7F94A1AA6B4C4005627AB /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CLANG_ENABLE_MODULES = YES;
				CODE_SIGN_IDENTITY = "iPhone Developer";
				DEVELOPMENT_TEAM = "";
				GCC_PREFIX_HEADER = MJRefreshExample/PrefixHeader.pch;
				INFOPLIST_FILE = MJRefreshExample/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
				);
				PRODUCT_BUNDLE_IDENTIFIER = com.mj.MJRefresh;
				PRODUCT_NAME = "$(TARGET_NAME)";
				SWIFT_OBJC_BRIDGING_HEADER = "MJRefreshExample/MJRefreshExample-Bridging-Header.h";
				SWIFT_VERSION = 5.0;
			};
			name = Release;
		};
		2DA7F94C1AA6B4C4005627AB /* Debug */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
				BUNDLE_LOADER = "$(TEST_HOST)";
				FRAMEWORK_SEARCH_PATHS = (
					"$(SDKROOT)/System/Library/Frameworks",
					"$(inherited)",
				);
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				INFOPLIST_FILE = MJRefreshExampleTests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
					"@loader_path/Frameworks",
				);
				PRODUCT_BUNDLE_IDENTIFIER = "com.mj.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(TARGET_NAME)";
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MJRefreshExample.app/MJRefreshExample";
			};
			name = Debug;
		};
		2DA7F94D1AA6B4C4005627AB /* Release */ = {
			isa = XCBuildConfiguration;
			buildSettings = {
				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
				BUNDLE_LOADER = "$(TEST_HOST)";
				FRAMEWORK_SEARCH_PATHS = (
					"$(SDKROOT)/System/Library/Frameworks",
					"$(inherited)",
				);
				INFOPLIST_FILE = MJRefreshExampleTests/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = (
					"$(inherited)",
					"@executable_path/Frameworks",
					"@loader_path/Frameworks",
				);
				PRODUCT_BUNDLE_IDENTIFIER = "com.mj.$(PRODUCT_NAME:rfc1034identifier)";
				PRODUCT_NAME = "$(TARGET_NAME)";
				TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MJRefreshExample.app/MJRefreshExample";
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		2DA7F9201AA6B4C4005627AB /* Build configuration list for PBXProject "MJRefreshExample" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				2DA7F9461AA6B4C4005627AB /* Debug */,
				2DA7F9471AA6B4C4005627AB /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		2DA7F9481AA6B4C4005627AB /* Build configuration list for PBXNativeTarget "MJRefreshExample" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				2DA7F9491AA6B4C4005627AB /* Debug */,
				2DA7F94A1AA6B4C4005627AB /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		2DA7F94B1AA6B4C4005627AB /* Build configuration list for PBXNativeTarget "MJRefreshExampleTests" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				2DA7F94C1AA6B4C4005627AB /* Debug */,
				2DA7F94D1AA6B4C4005627AB /* Release */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 2DA7F91D1AA6B4C4005627AB /* Project object */;
}


================================================
FILE: Examples/MJRefreshExample/MJRefreshExampleTests/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>$(PRODUCT_NAME)</string>
	<key>CFBundlePackageType</key>
	<string>BNDL</string>
	<key>CFBundleShortVersionString</key>
	<string>1.0</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>1</string>
</dict>
</plist>


================================================
FILE: Examples/MJRefreshExample/MJRefreshExampleTests/MJRefreshExampleTests.m
================================================
//
//  MJRefreshExampleTests.m
//  MJRefreshExampleTests
//
//  Created by MJ Lee on 15/3/4.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <XCTest/XCTest.h>

@interface MJRefreshExampleTests : XCTestCase

@end

@implementation MJRefreshExampleTests

- (void)setUp {
    [super setUp];
    // Put setup code here. This method is called before the invocation of each test method in the class.
}

- (void)tearDown {
    // Put teardown code here. This method is called after the invocation of each test method in the class.
    [super tearDown];
}

- (void)testExample {
    // This is an example of a functional test case.
    XCTAssert(YES, @"Pass");
}

- (void)testPerformanceExample {
    // This is an example of a performance test case.
    [self measureBlock:^{
        // Put the code you want to measure the time of here.
    }];
}

@end


================================================
FILE: Examples/SPMTestExample/SPMTestExample/AppDelegate.swift
================================================
//
//  AppDelegate.swift
//  SPMTestExample
//
//  Created by Frank on 2021/11/19.
//

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {



    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        return true
    }

    // MARK: UISceneSession Lifecycle

    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        // Called when a new scene session is being created.
        // Use this method to select a configuration to create the new scene with.
        return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
    }

    func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
        // Called when the user discards a scene session.
        // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
        // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
    }


}



================================================
FILE: Examples/SPMTestExample/SPMTestExample/Assets.xcassets/AccentColor.colorset/Contents.json
================================================
{
  "colors" : [
    {
      "idiom" : "universal"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: Examples/SPMTestExample/SPMTestExample/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "iphone",
      "scale" : "2x",
      "size" : "20x20"
    },
    {
      "idiom" : "iphone",
      "scale" : "3x",
      "size" : "20x20"
    },
    {
      "idiom" : "iphone",
      "scale" : "2x",
      "size" : "29x29"
    },
    {
      "idiom" : "iphone",
      "scale" : "3x",
      "size" : "29x29"
    },
    {
      "idiom" : "iphone",
      "scale" : "2x",
      "size" : "40x40"
    },
    {
      "idiom" : "iphone",
      "scale" : "3x",
      "size" : "40x40"
    },
    {
      "idiom" : "iphone",
      "scale" : "2x",
      "size" : "60x60"
    },
    {
      "idiom" : "iphone",
      "scale" : "3x",
      "size" : "60x60"
    },
    {
      "idiom" : "ipad",
      "scale" : "1x",
      "size" : "20x20"
    },
    {
      "idiom" : "ipad",
      "scale" : "2x",
      "size" : "20x20"
    },
    {
      "idiom" : "ipad",
      "scale" : "1x",
      "size" : "29x29"
    },
    {
      "idiom" : "ipad",
      "scale" : "2x",
      "size" : "29x29"
    },
    {
      "idiom" : "ipad",
      "scale" : "1x",
      "size" : "40x40"
    },
    {
      "idiom" : "ipad",
      "scale" : "2x",
      "size" : "40x40"
    },
    {
      "idiom" : "ipad",
      "scale" : "1x",
      "size" : "76x76"
    },
    {
      "idiom" : "ipad",
      "scale" : "2x",
      "size" : "76x76"
    },
    {
      "idiom" : "ipad",
      "scale" : "2x",
      "size" : "83.5x83.5"
    },
    {
      "idiom" : "ios-marketing",
      "scale" : "1x",
      "size" : "1024x1024"
    }
  ],
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: Examples/SPMTestExample/SPMTestExample/Assets.xcassets/Contents.json
================================================
{
  "info" : {
    "author" : "xcode",
    "version" : 1
  }
}


================================================
FILE: Examples/SPMTestExample/SPMTestExample/Base.lproj/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="EHf-IW-A2E">
            <objects>
                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                        <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
                        <viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="53" y="375"/>
        </scene>
    </scenes>
</document>


================================================
FILE: Examples/SPMTestExample/SPMTestExample/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19455" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="w3a-QR-X7y">
    <device id="retina6_1" orientation="portrait" appearance="light"/>
    <dependencies>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19454"/>
        <capability name="System colors in document resources" minToolsVersion="11.0"/>
        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
    </dependencies>
    <scenes>
        <!--Root View Controller-->
        <scene sceneID="QYf-AR-14S">
            <objects>
                <tableViewController id="34s-Pq-y6n" customClass="ViewController" customModule="SPMTestExample" customModuleProvider="target" sceneMemberID="viewController">
                    <tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" id="Zv8-64-BgA">
                        <rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" systemColor="systemBackgroundColor"/>
                        <prototypes>
                            <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="Cell" id="j3K-Gr-e5z">
                                <rect key="frame" x="0.0" y="44.5" width="414" height="43.5"/>
                                <autoresizingMask key="autoresizingMask"/>
                                <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="j3K-Gr-e5z" id="8Ca-li-jtW">
                                    <rect key="frame" x="0.0" y="0.0" width="414" height="43.5"/>
                                    <autoresizingMask key="autoresizingMask"/>
                                </tableViewCellContentView>
                            </tableViewCell>
                        </prototypes>
                        <connections>
                            <outlet property="dataSource" destination="34s-Pq-y6n" id="XfO-bS-t7z"/>
                            <outlet property="delegate" destination="34s-Pq-y6n" id="v0g-ab-IAU"/>
                        </connections>
                    </tableView>
                    <navigationItem key="navigationItem" title="Root View Controller" id="Aby-Rw-vUp"/>
                </tableViewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="uSv-ht-3Lb" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-514" y="-32"/>
        </scene>
        <!--Navigation Controller-->
        <scene sceneID="Pbd-e6-zbl">
            <objects>
                <navigationController id="w3a-QR-X7y" sceneMemberID="viewController">
                    <navigationBar key="navigationBar" contentMode="scaleToFill" id="KLv-dj-yrA">
                        <rect key="frame" x="0.0" y="44" width="414" height="44"/>
                        <autoresizingMask key="autoresizingMask"/>
                    </navigationBar>
                    <connections>
                        <segue destination="34s-Pq-y6n" kind="relationship" relationship="rootViewController" id="WdI-w6-CvK"/>
                    </connections>
                </navigationController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="qCy-mf-ADf" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="-1404" y="-32"/>
        </scene>
    </scenes>
    <resources>
        <systemColor name="systemBackgroundColor">
            <color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
        </systemColor>
    </resources>
</document>


================================================
FILE: Examples/SPMTestExample/SPMTestExample/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>UIApplicationSceneManifest</key>
	<dict>
		<key>UIApplicationSupportsMultipleScenes</key>
		<false/>
		<key>UISceneConfigurations</key>
		<dict>
			<key>UIWindowSceneSessionRoleApplication</key>
			<array>
				<dict>
					<key>UISceneConfigurationName</key>
					<string>Default Configuration</string>
					<key>UISceneDelegateClassName</key>
					<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
					<key>UISceneStoryboardFile</key>
					<string>Main</string>
				</dict>
			</array>
		</dict>
	</dict>
</dict>
</plist>


================================================
FILE: Examples/SPMTestExample/SPMTestExample/SceneDelegate.swift
================================================
//
//  SceneDelegate.swift
//  SPMTestExample
//
//  Created by Frank on 2021/11/19.
//

import UIKit

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?


    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
        guard let _ = (scene as? UIWindowScene) else { return }
    }

    func sceneDidDisconnect(_ scene: UIScene) {
        // Called as the scene is being released by the system.
        // This occurs shortly after the scene enters the background, or when its session is discarded.
        // Release any resources associated with this scene that can be re-created the next time the scene connects.
        // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
    }

    func sceneDidBecomeActive(_ scene: UIScene) {
        // Called when the scene has moved from an inactive state to an active state.
        // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
    }

    func sceneWillResignActive(_ scene: UIScene) {
        // Called when the scene will move from an active state to an inactive state.
        // This may occur due to temporary interruptions (ex. an incoming phone call).
    }

    func sceneWillEnterForeground(_ scene: UIScene) {
        // Called as the scene transitions from the background to the foreground.
        // Use this method to undo the changes made on entering the background.
    }

    func sceneDidEnterBackground(_ scene: UIScene) {
        // Called as the scene transitions from the foreground to the background.
        // Use this method to save data, release shared resources, and store enough scene-specific state information
        // to restore the scene back to its current state.
    }


}



================================================
FILE: Examples/SPMTestExample/SPMTestExample/ViewController.swift
================================================
//
//  ViewController.swift
//  SPMTestExample
//
//  Created by Frank on 2021/11/19.
//

import UIKit
import MJRefresh

class ViewController: UITableViewController {
    
    var itemsCount = 5

    override func viewDidLoad() {
        super.viewDidLoad()
        
        MJRefreshNormalHeader {
            DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { [weak self] in
                guard let self = self else { return }
                
                self.itemsCount += Int.random(in: 1...5)
                self.tableView.reloadData()
                
                self.tableView.mj_header?.endRefreshing()
            }
        }.autoChangeTransparency(true).link(to: self.tableView)
    }
    
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return itemsCount
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell")!
        
        cell.textLabel?.text = "\(indexPath.row)"
        return cell
    }
}



================================================
FILE: Examples/SPMTestExample/SPMTestExample.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 55;
	objects = {

/* Begin PBXBuildFile section */
		01A5B83227474A2300E9395F /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A5B83127474A2300E9395F /* AppDelegate.swift */; };
		01A5B83427474A2300E9395F /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A5B83327474A2300E9395F /* SceneDelegate.swift */; };
		01A5B83627474A2300E9395F /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01A5B83527474A2300E9395F /* ViewController.swift */; };
		01A5B83927474A2300E9395F /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01A5B83727474A2300E9395F /* Main.storyboard */; };
		01A5B83B27474A2400E9395F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 01A5B83A27474A2400E9395F /* Assets.xcassets */; };
		01A5B83E27474A2400E9395F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 01A5B83C27474A2400E9395F /* LaunchScreen.storyboard */; };
		01BCAEF327474BBD00F6FEE3 /* MJRefresh in Frameworks */ = {isa = PBXBuildFile; productRef = 01BCAEF227474BBD00F6FEE3 /* MJRefresh */; };
/* End PBXBuildFile section */

/* Begin PBXFileReference section */
		01A5B82E27474A2300E9395F /* SPMTestExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SPMTestExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
		01A5B83127474A2300E9395F /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
		01A5B83327474A2300E9395F /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
		01A5B83527474A2300E9395F /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
		01A5B83827474A2300E9395F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
		01A5B83A27474A2400E9395F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
		01A5B83D27474A2400E9395F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
		01A5B83F27474A2400E9395F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<
Download .txt
gitextract_a133_7b3/

├── .github/
│   └── ISSUE_TEMPLATE/
│       ├── bug--.md
│       └── feature--.md
├── .gitignore
├── .travis.yml
├── Examples/
│   ├── MJRefreshExample/
│   │   ├── MJRefreshExample/
│   │   │   ├── Base.lproj/
│   │   │   │   ├── LaunchScreen.xib
│   │   │   │   └── Main.storyboard
│   │   │   ├── Classes/
│   │   │   │   ├── Category/
│   │   │   │   │   ├── UIViewController+Example.h
│   │   │   │   │   └── UIViewController+Example.m
│   │   │   │   ├── DIY/
│   │   │   │   │   ├── MJChiBaoZiFooter.h
│   │   │   │   │   ├── MJChiBaoZiFooter.m
│   │   │   │   │   ├── MJChiBaoZiFooter2.h
│   │   │   │   │   ├── MJChiBaoZiFooter2.m
│   │   │   │   │   ├── MJChiBaoZiHeader.h
│   │   │   │   │   ├── MJChiBaoZiHeader.m
│   │   │   │   │   ├── MJDIYAutoFooter.h
│   │   │   │   │   ├── MJDIYAutoFooter.m
│   │   │   │   │   ├── MJDIYBackFooter.h
│   │   │   │   │   ├── MJDIYBackFooter.m
│   │   │   │   │   ├── MJDIYHeader.h
│   │   │   │   │   └── MJDIYHeader.m
│   │   │   │   ├── First/
│   │   │   │   │   ├── MJExample.h
│   │   │   │   │   ├── MJExample.m
│   │   │   │   │   ├── MJExampleViewController.h
│   │   │   │   │   ├── MJExampleViewController.m
│   │   │   │   │   ├── MJExampleWindow.h
│   │   │   │   │   ├── MJExampleWindow.m
│   │   │   │   │   ├── MJSingleViewController.h
│   │   │   │   │   ├── MJSingleViewController.m
│   │   │   │   │   ├── MJTempViewController.h
│   │   │   │   │   └── MJTempViewController.m
│   │   │   │   ├── Other/
│   │   │   │   │   ├── AppDelegate.h
│   │   │   │   │   └── AppDelegate.m
│   │   │   │   ├── Second/
│   │   │   │   │   ├── MJCollectionViewController.h
│   │   │   │   │   ├── MJCollectionViewController.m
│   │   │   │   │   ├── MJHorizontalCollectionViewController.h
│   │   │   │   │   ├── MJHorizontalCollectionViewController.m
│   │   │   │   │   ├── MJPinHeaderCollectionViewController.swift
│   │   │   │   │   ├── MJTableViewController.h
│   │   │   │   │   ├── MJTableViewController.m
│   │   │   │   │   ├── MJTestViewController.h
│   │   │   │   │   ├── MJTestViewController.m
│   │   │   │   │   ├── MJTestViewController.xib
│   │   │   │   │   ├── MJWebViewViewController.h
│   │   │   │   │   ├── MJWebViewViewController.m
│   │   │   │   │   └── MJWebViewViewController.xib
│   │   │   │   ├── SwiftExample/
│   │   │   │   │   └── MJWKWebViewController.swift
│   │   │   │   └── i18n/
│   │   │   │       ├── CustomLanguages.bundle/
│   │   │   │       │   ├── en.lproj/
│   │   │   │       │   │   └── Localizable.strings
│   │   │   │       │   ├── ko.lproj/
│   │   │   │       │   │   └── Localizable.strings
│   │   │   │       │   ├── ru.lproj/
│   │   │   │       │   │   └── Localizable.strings
│   │   │   │       │   ├── uk.lproj/
│   │   │   │       │   │   └── Localizable.strings
│   │   │   │       │   ├── zh-Hans.lproj/
│   │   │   │       │   │   └── Localizable.strings
│   │   │   │       │   └── zh-Hant.lproj/
│   │   │   │       │       └── Localizable.strings
│   │   │   │       ├── I18NExampleViewController.swift
│   │   │   │       ├── ar.lproj/
│   │   │   │       │   └── MJRefresh_i18n.strings
│   │   │   │       ├── en.lproj/
│   │   │   │       │   └── MJRefresh_i18n.strings
│   │   │   │       ├── ko.lproj/
│   │   │   │       │   └── MJRefresh_i18n.strings
│   │   │   │       ├── ru.lproj/
│   │   │   │       │   └── MJRefresh_i18n.strings
│   │   │   │       ├── uk.lproj/
│   │   │   │       │   └── MJRefresh_i18n.strings
│   │   │   │       ├── zh-Hans.lproj/
│   │   │   │       │   └── MJRefresh_i18n.strings
│   │   │   │       └── zh-Hant.lproj/
│   │   │   │           └── MJRefresh_i18n.strings
│   │   │   ├── Images.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── Contents.json
│   │   │   │   ├── DianPing/
│   │   │   │   │   ├── dropdown_anim__0001.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00010.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00011.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00012.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00013.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00014.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00015.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00016.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00017.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00018.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00019.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0002.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00020.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00021.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00022.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00023.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00024.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00025.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00026.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00027.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00028.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00029.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0003.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00030.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00031.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00032.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00033.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00034.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00035.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00036.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00037.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00038.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00039.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0004.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00040.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00041.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00042.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00043.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00044.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00045.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00046.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00047.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00048.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00049.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0005.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00050.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00051.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00052.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00053.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00054.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00055.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00056.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00057.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00058.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00059.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0006.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__00060.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0007.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0008.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_anim__0009.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_loading_01.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   ├── dropdown_loading_02.imageset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   └── dropdown_loading_03.imageset/
│   │   │   │   │       └── Contents.json
│   │   │   │   ├── MJRefresh.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── NavBar.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   ├── NavBar64.imageset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── logo.imageset/
│   │   │   │       └── Contents.json
│   │   │   ├── Info.plist
│   │   │   ├── MJRefreshExample-Bridging-Header.h
│   │   │   ├── PrefixHeader.pch
│   │   │   └── main.m
│   │   ├── MJRefreshExample.xcodeproj/
│   │   │   └── project.pbxproj
│   │   └── MJRefreshExampleTests/
│   │       ├── Info.plist
│   │       └── MJRefreshExampleTests.m
│   └── SPMTestExample/
│       ├── SPMTestExample/
│       │   ├── AppDelegate.swift
│       │   ├── Assets.xcassets/
│       │   │   ├── AccentColor.colorset/
│       │   │   │   └── Contents.json
│       │   │   ├── AppIcon.appiconset/
│       │   │   │   └── Contents.json
│       │   │   └── Contents.json
│       │   ├── Base.lproj/
│       │   │   ├── LaunchScreen.storyboard
│       │   │   └── Main.storyboard
│       │   ├── Info.plist
│       │   ├── SceneDelegate.swift
│       │   └── ViewController.swift
│       └── SPMTestExample.xcodeproj/
│           └── project.pbxproj
├── LICENSE
├── MJRefresh/
│   ├── Base/
│   │   ├── MJRefreshAutoFooter.h
│   │   ├── MJRefreshAutoFooter.m
│   │   ├── MJRefreshBackFooter.h
│   │   ├── MJRefreshBackFooter.m
│   │   ├── MJRefreshComponent.h
│   │   ├── MJRefreshComponent.m
│   │   ├── MJRefreshFooter.h
│   │   ├── MJRefreshFooter.m
│   │   ├── MJRefreshHeader.h
│   │   ├── MJRefreshHeader.m
│   │   ├── MJRefreshTrailer.h
│   │   └── MJRefreshTrailer.m
│   ├── Custom/
│   │   ├── Footer/
│   │   │   ├── Auto/
│   │   │   │   ├── MJRefreshAutoGifFooter.h
│   │   │   │   ├── MJRefreshAutoGifFooter.m
│   │   │   │   ├── MJRefreshAutoNormalFooter.h
│   │   │   │   ├── MJRefreshAutoNormalFooter.m
│   │   │   │   ├── MJRefreshAutoStateFooter.h
│   │   │   │   └── MJRefreshAutoStateFooter.m
│   │   │   └── Back/
│   │   │       ├── MJRefreshBackGifFooter.h
│   │   │       ├── MJRefreshBackGifFooter.m
│   │   │       ├── MJRefreshBackNormalFooter.h
│   │   │       ├── MJRefreshBackNormalFooter.m
│   │   │       ├── MJRefreshBackStateFooter.h
│   │   │       └── MJRefreshBackStateFooter.m
│   │   ├── Header/
│   │   │   ├── MJRefreshGifHeader.h
│   │   │   ├── MJRefreshGifHeader.m
│   │   │   ├── MJRefreshNormalHeader.h
│   │   │   ├── MJRefreshNormalHeader.m
│   │   │   ├── MJRefreshStateHeader.h
│   │   │   └── MJRefreshStateHeader.m
│   │   └── Trailer/
│   │       ├── MJRefreshNormalTrailer.h
│   │       ├── MJRefreshNormalTrailer.m
│   │       ├── MJRefreshStateTrailer.h
│   │       └── MJRefreshStateTrailer.m
│   ├── Info.plist
│   ├── MJRefresh.bundle/
│   │   ├── en.lproj/
│   │   │   └── Localizable.strings
│   │   ├── ko.lproj/
│   │   │   └── Localizable.strings
│   │   ├── ru.lproj/
│   │   │   └── Localizable.strings
│   │   ├── uk.lproj/
│   │   │   └── Localizable.strings
│   │   ├── zh-Hans.lproj/
│   │   │   └── Localizable.strings
│   │   └── zh-Hant.lproj/
│   │       └── Localizable.strings
│   ├── MJRefresh.h
│   ├── MJRefreshConfig.h
│   ├── MJRefreshConfig.m
│   ├── MJRefreshConst.h
│   ├── MJRefreshConst.m
│   ├── NSBundle+MJRefresh.h
│   ├── NSBundle+MJRefresh.m
│   ├── PrivacyInfo.xcprivacy
│   ├── UICollectionViewLayout+MJRefresh.h
│   ├── UICollectionViewLayout+MJRefresh.m
│   ├── UIScrollView+MJExtension.h
│   ├── UIScrollView+MJExtension.m
│   ├── UIScrollView+MJRefresh.h
│   ├── UIScrollView+MJRefresh.m
│   ├── UIView+MJExtension.h
│   └── UIView+MJExtension.m
├── MJRefresh.podspec
├── MJRefresh.xcodeproj/
│   ├── project.pbxproj
│   └── xcshareddata/
│       └── xcschemes/
│           └── MJRefresh.xcscheme
├── Package.swift
└── README.md
Download .txt
SYMBOL INDEX (2 symbols across 2 files)

FILE: MJRefresh/Base/MJRefreshComponent.h
  function interface (line 43) | interface MJRefreshComponent : UIView

FILE: MJRefresh/MJRefreshConst.h
  function CG_INLINE (line 93) | CG_INLINE BOOL MJRefreshExchangeImplementations(
Condensed preview — 209 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (417K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE/bug--.md",
    "chars": 430,
    "preview": "---\nname: Bug上报\nabout: 提交Bug让框架更加健壮\ntitle: ''\nlabels: bug\nassignees: ''\n\n---\n\n🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶🥶\n\n😁为了能够更好地复现问"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature--.md",
    "chars": 238,
    "preview": "---\nname: Feature建议\nabout: 为框架提供新功能建议\ntitle: ''\nlabels: feature\nassignees: ''\n\n---\n\n**你的新功能建议是否牵扯到某个常见的问题?**\n比如,在开发中,经常遇"
  },
  {
    "path": ".gitignore",
    "chars": 229,
    "preview": ".DS_Store\n\n# Xcode\nbuild/*\n*.pbxuser\n!default.pbxuser\n*.mode1v3\n!default.mode1v3\n*.mode2v3\n!default.mode2v3\n*.perspectiv"
  },
  {
    "path": ".travis.yml",
    "chars": 352,
    "preview": "language: objective-c\nxcode_project: MJRefreshExample.xcodeproj\nxcode_scheme: MJRefresh\n\nenv:\n  global:\n    - FRAMEWORK_"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Base.lproj/LaunchScreen.xib",
    "chars": 5598,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" versi"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Base.lproj/Main.storyboard",
    "chars": 13825,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Category/UIViewController+Example.h",
    "chars": 260,
    "preview": "//\n//  UIViewController+Example.h\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/3/12.\n//  Copyright (c) 2015年 小码哥."
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Category/UIViewController+Example.m",
    "chars": 856,
    "preview": "//\n//  UIViewController+Example.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/3/12.\n//  Copyright (c) 2015年 小码哥."
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJChiBaoZiFooter.h",
    "chars": 215,
    "preview": "//\n//  MJChiBaoZiFooter.h\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/12.\n//  Copyright © 2015年 小码哥. All right"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJChiBaoZiFooter.m",
    "chars": 638,
    "preview": "//\n//  MJChiBaoZiFooter.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/12.\n//  Copyright © 2015年 小码哥. All right"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJChiBaoZiFooter2.h",
    "chars": 217,
    "preview": "//\n//  MJChiBaoZiFooter2.h\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/12.\n//  Copyright © 2015年 小码哥. All righ"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJChiBaoZiFooter2.m",
    "chars": 1079,
    "preview": "//\n//  MJChiBaoZiFooter2.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/12.\n//  Copyright © 2015年 小码哥. All righ"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJChiBaoZiHeader.h",
    "chars": 223,
    "preview": "//\n//  MJChiBaoZiHeader.h\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/12.\n//  Copyright © 2015年 小码哥. All right"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJChiBaoZiHeader.m",
    "chars": 1077,
    "preview": "//\n//  MJChiBaoZiHeader.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/12.\n//  Copyright © 2015年 小码哥. All right"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJDIYAutoFooter.h",
    "chars": 210,
    "preview": "//\n//  MJDIYAutoFooter.h\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/13.\n//  Copyright © 2015年 小码哥. All rights"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJDIYAutoFooter.m",
    "chars": 2606,
    "preview": "//\n//  MJDIYAutoFooter.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/13.\n//  Copyright © 2015年 小码哥. All rights"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJDIYBackFooter.h",
    "chars": 210,
    "preview": "//\n//  MJDIYBackFooter.h\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/13.\n//  Copyright © 2015年 小码哥. All rights"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJDIYBackFooter.m",
    "chars": 3545,
    "preview": "//\n//  MJDIYBackFooter.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/13.\n//  Copyright © 2015年 小码哥. All rights"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJDIYHeader.h",
    "chars": 198,
    "preview": "//\n//  MJDIYHeader.h\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/13.\n//  Copyright © 2015年 小码哥. All rights res"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/DIY/MJDIYHeader.m",
    "chars": 3328,
    "preview": "//\n//  MJDIYHeader.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/13.\n//  Copyright © 2015年 小码哥. All rights res"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExample.h",
    "chars": 447,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJExample.h\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/3/"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExample.m",
    "chars": 232,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJExample.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/3/"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExampleViewController.h",
    "chars": 281,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJExampleViewController.h\n//  MJRefreshExample\n//\n//  Created by M"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExampleViewController.m",
    "chars": 5287,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJExampleViewController.m\n//  MJRefreshExample\n//\n//  Created by M"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExampleWindow.h",
    "chars": 219,
    "preview": "//\n//  MJExampleWindow.h\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/8/17.\n//  Copyright (c) 2015年 小码哥. All righ"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJExampleWindow.m",
    "chars": 881,
    "preview": "//\n//  MJExampleWindow.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/8/17.\n//  Copyright (c) 2015年 小码哥. All righ"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJSingleViewController.h",
    "chars": 231,
    "preview": "//\n//  MJSingleViewController.h\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/13.\n//  Copyright © 2015年 小码哥. All"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJSingleViewController.m",
    "chars": 2556,
    "preview": "//\n//  MJSingleViewController.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/6/13.\n//  Copyright © 2015年 小码哥. All"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJTempViewController.h",
    "chars": 371,
    "preview": "//\n//  MJTempViewController.h\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/9/22.\n//  Copyright © 2015年 小码哥. All r"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/First/MJTempViewController.m",
    "chars": 2497,
    "preview": "//\n//  MJTempViewController.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/9/22.\n//  Copyright © 2015年 小码哥. All r"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Other/AppDelegate.h",
    "chars": 322,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  AppDelegate.h\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Other/AppDelegate.m",
    "chars": 1910,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  AppDelegate.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJCollectionViewController.h",
    "chars": 312,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJCollectionViewController.h\n//  MJRefreshExample\n//\n//  Created b"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJCollectionViewController.m",
    "chars": 5271,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJCollectionViewController.m\n//  MJRefreshExample\n//\n//  Created b"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJHorizontalCollectionViewController.h",
    "chars": 314,
    "preview": "//\n//  MJHorizontalCollectionViewController.h\n//  MJRefreshExample\n//\n//  Created by libin14 on 2020/9/13.\n//  Copyright"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJHorizontalCollectionViewController.m",
    "chars": 3478,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJHorizontalCollectionViewController.m\n//  MJRefreshExample\n//\n// "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJPinHeaderCollectionViewController.swift",
    "chars": 1353,
    "preview": "//\n//  MJPinHeaderCollectionViewController.swift\n//  MJRefreshExample\n//\n//  Created by Frank on 2023/9/18.\n//  Copyrigh"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJTableViewController.h",
    "chars": 277,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJTableViewController.h\n//  MJRefreshExample\n//\n//  Created by MJ "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJTableViewController.m",
    "chars": 12086,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJTableViewController.m\n//  MJRefreshExample\n//\n//  Created by MJ "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJTestViewController.h",
    "chars": 485,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJTestViewController.h\n//  MJRefreshExample\n//\n//  Created by MJ L"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJTestViewController.m",
    "chars": 765,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJTestViewController.m\n//  MJRefreshExample\n//\n//  Created by MJ L"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJTestViewController.xib",
    "chars": 1424,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVe"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJWebViewViewController.h",
    "chars": 230,
    "preview": "//\n//  MJWebViewViewController.h\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/3/12.\n//  Copyright (c) 2015年 小码哥. "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJWebViewViewController.m",
    "chars": 1930,
    "preview": "//\n//  MJWebViewViewController.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/3/12.\n//  Copyright (c) 2015年 小码哥. "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/Second/MJWebViewViewController.xib",
    "chars": 5285,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.XIB\" version=\"3.0\" toolsVe"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/SwiftExample/MJWKWebViewController.swift",
    "chars": 2869,
    "preview": "//\n//  MJWKWebViewController.swift\n//  MJRefreshExample\n//\n//  Created by Frank on 2021/3/3.\n//  Copyright © 2021 小码哥. A"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Classes/i18n/I18NExampleViewController.swift",
    "chars": 3115,
    "preview": "//\n//  I18NExampleViewController.swift\n//  MJRefreshExample\n//\n//  Created by Frank on 2021/7/5.\n//  Copyright © 2021 小码"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 2451,
    "preview": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"ipad-20x20@2x.png\",\n      \""
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/Contents.json",
    "chars": 62,
    "preview": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0001.imageset/Contents.json",
    "chars": 319,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00010.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00011.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00012.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00013.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00014.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00015.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00016.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00017.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00018.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00019.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0002.imageset/Contents.json",
    "chars": 319,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00020.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00021.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00022.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00023.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00024.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00025.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00026.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00027.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00028.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00029.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0003.imageset/Contents.json",
    "chars": 319,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00030.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00031.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00032.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00033.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00034.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00035.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00036.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00037.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00038.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00039.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0004.imageset/Contents.json",
    "chars": 319,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00040.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00041.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00042.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00043.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00044.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00045.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00046.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00047.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00048.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00049.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0005.imageset/Contents.json",
    "chars": 319,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00050.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00051.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00052.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00053.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00054.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00055.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00056.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00057.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00058.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00059.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0006.imageset/Contents.json",
    "chars": 319,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__00060.imageset/Contents.json",
    "chars": 320,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0007.imageset/Contents.json",
    "chars": 319,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0008.imageset/Contents.json",
    "chars": 319,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_anim__0009.imageset/Contents.json",
    "chars": 319,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_loading_01.imageset/Contents.json",
    "chars": 319,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_loading_02.imageset/Contents.json",
    "chars": 319,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/DianPing/dropdown_loading_03.imageset/Contents.json",
    "chars": 319,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/MJRefresh.imageset/Contents.json",
    "chars": 306,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"MJRefresh.png\",\n      \"scale\" : \"1x\"\n    },\n    "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/NavBar.imageset/Contents.json",
    "chars": 306,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/NavBar64.imageset/Contents.json",
    "chars": 308,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n     "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Images.xcassets/logo.imageset/Contents.json",
    "chars": 335,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"logo.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n   "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/Info.plist",
    "chars": 1587,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/MJRefreshExample-Bridging-Header.h",
    "chars": 172,
    "preview": "//\n//  Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n#import \"MJChiBa"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/PrefixHeader.pch",
    "chars": 247,
    "preview": "//\n//  PrefixHeader.pch\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/9/22.\n//  Copyright © 2015年 小码哥. All rights "
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample/main.m",
    "chars": 332,
    "preview": "//\n//  main.m\n//  MJRefreshExample\n//\n//  Created by MJ Lee on 15/3/4.\n//  Copyright (c) 2015年 小码哥. All rights reserved."
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExample.xcodeproj/project.pbxproj",
    "chars": 39951,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExampleTests/Info.plist",
    "chars": 733,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Examples/MJRefreshExample/MJRefreshExampleTests/MJRefreshExampleTests.m",
    "chars": 884,
    "preview": "//\n//  MJRefreshExampleTests.m\n//  MJRefreshExampleTests\n//\n//  Created by MJ Lee on 15/3/4.\n//  Copyright (c) 2015年 小码哥"
  },
  {
    "path": "Examples/SPMTestExample/SPMTestExample/AppDelegate.swift",
    "chars": 1349,
    "preview": "//\n//  AppDelegate.swift\n//  SPMTestExample\n//\n//  Created by Frank on 2021/11/19.\n//\n\nimport UIKit\n\n@main\nclass AppDele"
  },
  {
    "path": "Examples/SPMTestExample/SPMTestExample/Assets.xcassets/AccentColor.colorset/Contents.json",
    "chars": 123,
    "preview": "{\n  \"colors\" : [\n    {\n      \"idiom\" : \"universal\"\n    }\n  ],\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }"
  },
  {
    "path": "Examples/SPMTestExample/SPMTestExample/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 1591,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"iphone\",\n      \"scale\" : \"2x\",\n      \"size\" : \"20x20\"\n    },\n    {\n      \"idiom\""
  },
  {
    "path": "Examples/SPMTestExample/SPMTestExample/Assets.xcassets/Contents.json",
    "chars": 63,
    "preview": "{\n  \"info\" : {\n    \"author\" : \"xcode\",\n    \"version\" : 1\n  }\n}\n"
  },
  {
    "path": "Examples/SPMTestExample/SPMTestExample/Base.lproj/LaunchScreen.storyboard",
    "chars": 1665,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "Examples/SPMTestExample/SPMTestExample/Base.lproj/Main.storyboard",
    "chars": 4579,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
  },
  {
    "path": "Examples/SPMTestExample/SPMTestExample/Info.plist",
    "chars": 704,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "Examples/SPMTestExample/SPMTestExample/SceneDelegate.swift",
    "chars": 2292,
    "preview": "//\n//  SceneDelegate.swift\n//  SPMTestExample\n//\n//  Created by Frank on 2021/11/19.\n//\n\nimport UIKit\n\nclass SceneDelega"
  },
  {
    "path": "Examples/SPMTestExample/SPMTestExample/ViewController.swift",
    "chars": 1126,
    "preview": "//\n//  ViewController.swift\n//  SPMTestExample\n//\n//  Created by Frank on 2021/11/19.\n//\n\nimport UIKit\nimport MJRefresh\n"
  },
  {
    "path": "Examples/SPMTestExample/SPMTestExample.xcodeproj/project.pbxproj",
    "chars": 15533,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 55;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "LICENSE",
    "chars": 1100,
    "preview": "Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh)\n\nPermission is hereby granted, free of charg"
  },
  {
    "path": "MJRefresh/Base/MJRefreshAutoFooter.h",
    "chars": 715,
    "preview": "//\n//  MJRefreshAutoFooter.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All rights "
  },
  {
    "path": "MJRefresh/Base/MJRefreshAutoFooter.m",
    "chars": 5960,
    "preview": "//\n//  MJRefreshAutoFooter.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All rights "
  },
  {
    "path": "MJRefresh/Base/MJRefreshBackFooter.h",
    "chars": 366,
    "preview": "//\n//  MJRefreshBackFooter.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All rights "
  },
  {
    "path": "MJRefresh/Base/MJRefreshBackFooter.m",
    "chars": 5323,
    "preview": "//\n//  MJRefreshBackFooter.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All rights "
  },
  {
    "path": "MJRefresh/Base/MJRefreshComponent.h",
    "chars": 5675,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJRefreshComponent.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/"
  },
  {
    "path": "MJRefresh/Base/MJRefreshComponent.m",
    "chars": 9669,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJRefreshComponent.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/"
  },
  {
    "path": "MJRefresh/Base/MJRefreshFooter.h",
    "chars": 1113,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJRefreshFooter.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/3/5"
  },
  {
    "path": "MJRefresh/Base/MJRefreshFooter.m",
    "chars": 1504,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJRefreshFooter.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/3/5"
  },
  {
    "path": "MJRefresh/Base/MJRefreshHeader.h",
    "chars": 1039,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJRefreshHeader.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/3/4"
  },
  {
    "path": "MJRefresh/Base/MJRefreshHeader.m",
    "chars": 10977,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  MJRefreshHeader.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/3/4"
  },
  {
    "path": "MJRefresh/Base/MJRefreshTrailer.h",
    "chars": 695,
    "preview": "//\n//  MJRefreshTrailer.h\n//  MJRefresh\n//\n//  Created by kinarobin on 2020/5/3.\n//  Copyright © 2020 小码哥. All rights re"
  },
  {
    "path": "MJRefresh/Base/MJRefreshTrailer.m",
    "chars": 5963,
    "preview": "//\n//  MJRefreshTrailer.m\n//  MJRefresh\n//\n//  Created by kinarobin on 2020/5/3.\n//  Copyright © 2020 小码哥. All rights re"
  },
  {
    "path": "MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h",
    "chars": 697,
    "preview": "//\n//  MJRefreshAutoGifFooter.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All righ"
  },
  {
    "path": "MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m",
    "chars": 3275,
    "preview": "//\n//  MJRefreshAutoGifFooter.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All righ"
  },
  {
    "path": "MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h",
    "chars": 669,
    "preview": "//\n//  MJRefreshAutoNormalFooter.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All r"
  },
  {
    "path": "MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m",
    "chars": 2161,
    "preview": "//\n//  MJRefreshAutoNormalFooter.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All r"
  },
  {
    "path": "MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h",
    "chars": 747,
    "preview": "//\n//  MJRefreshAutoStateFooter.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/6/13.\n//  Copyright © 2015年 小码哥. All righ"
  },
  {
    "path": "MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m",
    "chars": 2822,
    "preview": "//\n//  MJRefreshAutoStateFooter.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/6/13.\n//  Copyright © 2015年 小码哥. All righ"
  },
  {
    "path": "MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h",
    "chars": 697,
    "preview": "//\n//  MJRefreshBackGifFooter.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All righ"
  },
  {
    "path": "MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m",
    "chars": 3733,
    "preview": "//\n//  MJRefreshBackGifFooter.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All righ"
  },
  {
    "path": "MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h",
    "chars": 730,
    "preview": "//\n//  MJRefreshBackNormalFooter.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All r"
  },
  {
    "path": "MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m",
    "chars": 4148,
    "preview": "//\n//  MJRefreshBackNormalFooter.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All r"
  },
  {
    "path": "MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h",
    "chars": 714,
    "preview": "//\n//  MJRefreshBackStateFooter.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/6/13.\n//  Copyright © 2015年 小码哥. All righ"
  },
  {
    "path": "MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m",
    "chars": 2324,
    "preview": "//\n//  MJRefreshBackStateFooter.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/6/13.\n//  Copyright © 2015年 小码哥. All righ"
  },
  {
    "path": "MJRefresh/Custom/Header/MJRefreshGifHeader.h",
    "chars": 673,
    "preview": "//\n//  MJRefreshGifHeader.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All rights r"
  },
  {
    "path": "MJRefresh/Custom/Header/MJRefreshGifHeader.m",
    "chars": 3882,
    "preview": "//\n//  MJRefreshGifHeader.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All rights r"
  },
  {
    "path": "MJRefresh/Custom/Header/MJRefreshNormalHeader.h",
    "chars": 707,
    "preview": "//\n//  MJRefreshNormalHeader.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All right"
  },
  {
    "path": "MJRefresh/Custom/Header/MJRefreshNormalHeader.m",
    "chars": 4352,
    "preview": "//\n//  MJRefreshNormalHeader.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All right"
  },
  {
    "path": "MJRefresh/Custom/Header/MJRefreshStateHeader.h",
    "chars": 1049,
    "preview": "//\n//  MJRefreshStateHeader.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All rights"
  },
  {
    "path": "MJRefresh/Custom/Header/MJRefreshStateHeader.m",
    "chars": 6064,
    "preview": "//\n//  MJRefreshStateHeader.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 15/4/24.\n//  Copyright (c) 2015年 小码哥. All rights"
  },
  {
    "path": "MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.h",
    "chars": 460,
    "preview": "//\n//  MJRefreshNormalTrailer.h\n//  MJRefresh\n//\n//  Created by kinarobin on 2020/5/3.\n//  Copyright © 2020 小码哥. All rig"
  },
  {
    "path": "MJRefresh/Custom/Trailer/MJRefreshNormalTrailer.m",
    "chars": 2819,
    "preview": "//\n//  MJRefreshNormalTrailer.m\n//  MJRefresh\n//\n//  Created by kinarobin on 2020/5/3.\n//  Copyright © 2020 小码哥. All rig"
  },
  {
    "path": "MJRefresh/Custom/Trailer/MJRefreshStateTrailer.h",
    "chars": 572,
    "preview": "//\n//  MJRefreshStateTrailer.h\n//  MJRefresh\n//\n//  Created by kinarobin on 2020/5/3.\n//  Copyright © 2020 小码哥. All righ"
  },
  {
    "path": "MJRefresh/Custom/Trailer/MJRefreshStateTrailer.m",
    "chars": 2410,
    "preview": "//\n//  MJRefreshStateTrailer.m\n//  MJRefresh\n//\n//  Created by kinarobin on 2020/5/3.\n//  Copyright © 2020 小码哥. All righ"
  },
  {
    "path": "MJRefresh/Info.plist",
    "chars": 774,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "MJRefresh/MJRefresh.bundle/ko.lproj/Localizable.strings",
    "chars": 611,
    "preview": "\"MJRefreshHeaderIdleText\" = \"아래로 당겨 새로고침\";\n\"MJRefreshHeaderPullingText\" = \"놓으면 새로고침\";\n\"MJRefreshHeaderRefreshingText\" = "
  },
  {
    "path": "MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings",
    "chars": 683,
    "preview": "\"MJRefreshHeaderIdleText\" = \"下拉可以刷新\";\n\"MJRefreshHeaderPullingText\" = \"鬆開立即刷新\";\n\"MJRefreshHeaderRefreshingText\" = \"正在刷新數據"
  },
  {
    "path": "MJRefresh/MJRefresh.h",
    "chars": 1262,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n\n#import <Foundation/Foundation.h>\n\n#if __has_include(<MJRefresh/MJRef"
  },
  {
    "path": "MJRefresh/MJRefreshConfig.h",
    "chars": 831,
    "preview": "//\n//  MJRefreshConfig.h\n//\n//  Created by Frank on 2018/11/27.\n//  Copyright © 2018 小码哥. All rights reserved.\n//\n\n#impo"
  },
  {
    "path": "MJRefresh/MJRefreshConfig.m",
    "chars": 914,
    "preview": "//\n//  MJRefreshConfig.m\n//\n//  Created by Frank on 2018/11/27.\n//  Copyright © 2018 小码哥. All rights reserved.\n//\n\n#impo"
  },
  {
    "path": "MJRefresh/MJRefreshConst.h",
    "chars": 4239,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n#import <UIKit/UIKit.h>\n#import <objc/message.h>\n#import <objc/runtime"
  },
  {
    "path": "MJRefresh/MJRefreshConst.m",
    "chars": 2020,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n#import <UIKit/UIKit.h>\n\nconst CGFloat MJRefreshLabelLeftInset = 25;\nc"
  },
  {
    "path": "MJRefresh/NSBundle+MJRefresh.h",
    "chars": 481,
    "preview": "//\n//  NSBundle+MJRefresh.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 16/6/13.\n//  Copyright © 2016年 小码哥. All rights res"
  },
  {
    "path": "MJRefresh/NSBundle+MJRefresh.m",
    "chars": 3840,
    "preview": "//\n//  NSBundle+MJRefresh.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 16/6/13.\n//  Copyright © 2016年 小码哥. All rights res"
  },
  {
    "path": "MJRefresh/PrivacyInfo.xcprivacy",
    "chars": 598,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "MJRefresh/UICollectionViewLayout+MJRefresh.h",
    "chars": 399,
    "preview": "//\n//  UICollectionViewLayout+MJRefresh.h\n//  \n//  该类是用来解决 Footer 在底端加载完成后, 仍停留在原处的 bug.\n//  此问题出现在 iOS 14 及以下系统上.\n//  R"
  },
  {
    "path": "MJRefresh/UICollectionViewLayout+MJRefresh.m",
    "chars": 1455,
    "preview": "//\n//  UICollectionViewLayout+MJRefresh.m\n//\n//  该类是用来解决 Footer 在底端加载完成后, 仍停留在原处的 bug.\n//  此问题出现在 iOS 14 及以下系统上.\n//  Ref"
  },
  {
    "path": "MJRefresh/UIScrollView+MJExtension.h",
    "chars": 756,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  UIScrollView+Extension.h\n//  MJRefresh\n//\n//  Created by MJ Lee on"
  },
  {
    "path": "MJRefresh/UIScrollView+MJExtension.m",
    "chars": 3144,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  UIScrollView+Extension.m\n//  MJRefresh\n//\n//  Created by MJ Lee on"
  },
  {
    "path": "MJRefresh/UIScrollView+MJRefresh.h",
    "chars": 1019,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  UIScrollView+MJRefresh.h\n//  MJRefresh\n//\n//  Created by MJ Lee on"
  },
  {
    "path": "MJRefresh/UIScrollView+MJRefresh.m",
    "chars": 3100,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  UIScrollView+MJRefresh.m\n//  MJRefresh\n//\n//  Created by MJ Lee on"
  },
  {
    "path": "MJRefresh/UIView+MJExtension.h",
    "chars": 558,
    "preview": "// 代码地址: https://github.com/CoderMJLee/MJRefresh\n//  UIView+Extension.h\n//  MJRefresh\n//\n//  Created by MJ Lee on 14-5-2"
  },
  {
    "path": "MJRefresh/UIView+MJExtension.m",
    "chars": 1299,
    "preview": "//  代码地址: https://github.com/CoderMJLee/MJRefresh\n//  UIView+Extension.m\n//  MJRefresh\n//\n//  Created by MJ Lee on 14-5-"
  },
  {
    "path": "MJRefresh.podspec",
    "chars": 674,
    "preview": "Pod::Spec.new do |s|\n    s.name         = 'MJRefresh'\n    s.version      = '3.7.9'\n    s.summary      = 'An easy way to "
  },
  {
    "path": "MJRefresh.xcodeproj/project.pbxproj",
    "chars": 38673,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "MJRefresh.xcodeproj/xcshareddata/xcschemes/MJRefresh.xcscheme",
    "chars": 2762,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"1220\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "Package.swift",
    "chars": 729,
    "preview": "// swift-tools-version:5.3\n// The swift-tools-version declares the minimum version of Swift required to build this packa"
  },
  {
    "path": "README.md",
    "chars": 20042,
    "preview": "## MJRefresh\n[![SPM supported](https://img.shields.io/badge/SPM-supported-4BC51D.svg?style=flat)](https://github.com/app"
  }
]

// ... and 17 more files (download for full content)

About this extraction

This page contains the full source code of the CoderMJLee/MJRefresh GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 209 files (364.5 KB), approximately 118.6k tokens, and a symbol index with 2 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!