All Projects → AnRanScheme → MagiRefresh

AnRanScheme / MagiRefresh

Licence: MIT license
swift版下拉刷新,支持多种样式,同时支持,加载动画,网络错误占位(有兴趣学习如何用swift使用runtime的可以看看)

Programming Languages

swift
15916 projects
ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to MagiRefresh

Swiperefreshlayout
swipeRefreshLayout refresh pull-to-refresh
Stars: ✭ 26 (+4%)
Mutual labels:  refresh, pull-to-refresh
ParticlesRefreshLayout-android
Particles Refresh Layout library for Android
Stars: ✭ 15 (-40%)
Mutual labels:  refresh, pull-to-refresh
React Native Rk Pull To Refresh
a pull to refresh component for react-native, same api on both android and ios
Stars: ✭ 100 (+300%)
Mutual labels:  refresh, pull-to-refresh
SwiftFCXRefresh
Pull to refresh in Swift.
Stars: ✭ 29 (+16%)
Mutual labels:  refresh, pull-to-refresh
Kafkarefresh
Animated, customizable, and flexible pull-to-refresh framework for faster and easier iOS development.
Stars: ✭ 1,033 (+4032%)
Mutual labels:  refresh, pull-to-refresh
Pull To Refresh
ESPullToRefresh is developed and maintained by Vincent Li. If you have any questions or issues in using ESPullToRefresh, welcome to issue. If you want to contribute to ESPullToRefresh, Please submit Pull Request, I will deal with it as soon as possible.
Stars: ✭ 1,591 (+6264%)
Mutual labels:  refresh, pull-to-refresh
Pull To Refresh.rentals Ios
This project aims to provide a simple and customizable pull to refresh implementation. Made in Yalantis
Stars: ✭ 2,171 (+8584%)
Mutual labels:  refresh, pull-to-refresh
Scroller
React版iScroll并且集成下拉刷新,上拉加载更多,Sticky等功能
Stars: ✭ 52 (+108%)
Mutual labels:  pull-to-refresh
LiteRefresh
Nested scrolling UI library for Android based on CoordinatorLayout. Pull-to-refresh and pull-to-load-more are supported.
Stars: ✭ 37 (+48%)
Mutual labels:  pull-to-refresh
smart-react-native-app
React Native 下拉刷新, 分页加载, 侧边栏, Tab导航学习(Android Studio, ES6语法)
Stars: ✭ 56 (+124%)
Mutual labels:  pull-to-refresh
flutter examples
Random flutter examples
Stars: ✭ 18 (-28%)
Mutual labels:  pull-to-refresh
AnimatedPullToRefresh-master
A Cool pull to refresh widget provided with character animation in header with user defined text. Customise your widget and show off your home screen!!
Stars: ✭ 38 (+52%)
Mutual labels:  pull-to-refresh
zepto-refresh
实现下拉到底部和上拉到顶部再拉就出现刷新效果
Stars: ✭ 20 (-20%)
Mutual labels:  refresh
XSPullRefresh
下拉刷新日蚀效果 eclipse
Stars: ✭ 24 (-4%)
Mutual labels:  pull-to-refresh
View-Load-ReTry
这个加载框架有点不一样,针对View进行加载,加载页面还保持了原View的属性,侧重点在灵活,哪里需要加载哪里,加载状态页面完全自定义,无任何限制,针对加载结果可以按需配置对应页面,LeakCanary检测无内存泄漏
Stars: ✭ 116 (+364%)
Mutual labels:  refresh
Power-Refresh-VBScript
Visual Basic Script Refresher for Excel files with Power Query and PowerPivot model
Stars: ✭ 18 (-28%)
Mutual labels:  refresh
vuejs-loadmore
A pull-down refresh and pull-up loadmore scroll component for Vue.js. Vue上拉加载下拉刷新组件
Stars: ✭ 62 (+148%)
Mutual labels:  refresh
react-native-drop-refresh
♻️ A pull down to refresh control for react native.
Stars: ✭ 66 (+164%)
Mutual labels:  refresh
LXFProtocolTool
由Swift中协议方式实现功能的实用工具库【Refreshable、EmptyDataSetable 支持 Rx 】
Stars: ✭ 101 (+304%)
Mutual labels:  refresh
SJLineRefresh
pull-to-refresh by line path
Stars: ✭ 36 (+44%)
Mutual labels:  pull-to-refresh

MagiRefresh

当tabelView和collectionView的数据源为0的时候可以显示数据为空的替代页面, 并且内置多种动画、可自定义和灵活的iOS下拉刷新框架(Swift实现)

Bug提交 · 需求提交


Status

building GitHub license CocoaPods Compatible language platform Email


PlaceHolder Screenshots

数据为空的样式 tableView collectionView webView

PlaceHolder 特点

可以定义数据为空的样式因为每个项目的需求不一样所以我就添加了一个customView 只要将自定义的view付给他就好 还有一个我提供的样式可以设置图片

这只是一个简单而实用的附带功能他只能使用在以上的3个控件上

PlaceHolder 使用方法

初始化控件
  1. MagiRefresh提供的方法
    // 空数据界面显示
    let placeHolder = MagiPlaceHolder.createPlaceHolderWithClosure(
        imageName: "search_noData",
        title: "NoData",
        detailTitle: "",
        refreshBtnTitle: "") {
        print("TapRefreshButton")
    }
    placeHolder.contentViewOffset = -100
    placeHolder.titleLabFont = UIFont.systemFont(ofSize: 18)
    placeHolder.titleLabTextColor = UIColor.purple
    tableView.magiRefresh.placeHolder = placeHolder
    tableView.magiRefresh.placeHolder?.tapBlankViewClosure = {
                print("TapBlankView")
    }       
    tableView.magiRefresh.showPlaceHolder()
  2. MagiRefresh提供的自定义方法
    let emptyView = Bundle.main.loadNibNamed(
        "MyEmptyView", owner: self, options: nil)?.last
        as! MyEmptyView
    emptyView.reloadBtn.addTarget(
             self,
             action: #selector(reloadBtnAction(_:)),
             for: .touchUpInside)
    emptyView.frame = view.bounds
    //空数据界面显示
    let placeHolder = MagiPlaceHolder.createCustomPlaceHolder(emptyView)
    tableView.magiRefresh.placeHolder = placeHolder
    tableView.magiRefresh.placeHolder?.tapBlankViewClosure = {
             print("点击界面空白区域")
    }
    tableView.magiRefresh.showPlaceHolder()

Refresh Screenshots

MagiRefreshStyle Top Screenshots Bottom Screenshots
native
replicatorWoody
replicatorAllen
replicatorCircle
replicatorDot
replicatorArc
replicatorTriangle
animatableRing
animatableArrow

特点

  • 支持多样式选择与自定义

总共有9种动画样式

  • 非刷新状态自动隐藏

即使手动调整过contentInset,依然能够在非刷新状态自动隐藏影。最常见的情况是:当数据量过少,UITableView停止刷新后,用户依旧能看到刷新控件的存在,从而影响的视觉体验。

  • 刷新结束时抗抖动

当UIScrollView处于刷新状态,且用户滑动UIScrollView,当刷新结束时,MagiRefresh不会调整UIScrollView的内容,从而导致页面跳动;

  • 支持设置控件高度

stretchOffsetYAxisThreshold是根据刷新控件的高度进行的比例调整。如:当设置stretchOffsetYAxisThreshold为1.5时,触发刷新的偏移距离将调整为原来的1.5倍。(设置时请大于1)

  • 支持全局配置

MagiRefreshDefaults类似一个配置表,通过该配置表配置全局的刷新样式,而无需在每一个页面初始化或者绑定刷新控件。

  • 支持进度回调

实时回调拖拽的偏移比例,对于扩展接口,可根据进度调整动画。该接口的开放可用于扩展更多的刷新样式。

  • 自适应contentInset系统调整与手动调整

自适应iOS7以后UINavigationController自动调整scrollview contentOffset,MagiRefresh也对iOS 11进行了适配;当您手动设置了contentInset的值,也无需担心MagiRefresh会影响到视觉效果。

  • 解决刷新状态分组视图悬停问题

即使在列表滑动时,分组视图都将跟随ScrollView滑动(即使处于高速滑动状态下!)。

  • 支持预加载

    当用户滑动scrollview接近至底部时,将会自动触发刷新,无需用户再滑至底部后拉起scrollview。该功能默认不开启,因为多数人不查看文档便欣然使用改功能,不正确使用极容易引发刷新无法停止。

    使用预加载功能,请严格按照下面要求使用:

    • tableView.magiRefresh.footer?.isAutoRefreshOnFoot = true 请手动将刷新该属性至为False;

    • 在刷新调用的block块中,严格按下列逻辑编写:

       if (没有数据需要拼接了) {
           self?.tableView.magiRefresh.footer?.endRefreshingAndNoLongerRefreshingWithAlertText("no more")
       } else {
           self?.tableView.magiRefresh.footer?.endRefreshingWithAlertText( "Did load successfully", completion:nil)
       }
  • 文档覆盖率100%、支持横竖屏切换自适应、iOS 7+。

安装

  • CocoaPods
pod 'MagiRefresh'

使用

1.初始化控件
  • 方式一
// MARK: - head
tableView.magiRefresh.bindStyleForHeaderRefresh(themeColor: UIColor.red,
                                                         refreshStyle: MagiRefreshStyle.animatableArrow,
                                                         completion: {
                                                            print("加载完成处理逻辑")
})

// MARK: - foot
tableView.magiRefresh.bindStyleForFooterRefresh(themeColor: UIColor.red,
                                                 refreshStyle: MagiRefreshStyle.animatableArrow,
                                                 completion: {
                                                            print("加载完成处理逻辑")
})

// MARK: - auto refresh
tableView.magiRefresh.footer?.isAutoRefreshOnFoot = true
  • 方式二
let header = MagiArrowHeader()
header.magiRefreshingClosure {  [weak self] in
      print("加载完成处理逻辑")
}
tableView.magiRefresh.header = header
  • 方式三 全局配置
func application(_ application: UIApplication, didFinishLaunchingWithOptions 
                  launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
       MagiRefreshDefaults.shared.headerDefaultStyle = .replicatorAllen
	
       return true
}

// MARK: - global

tableView.magiRefresh.bindStyleForHeaderRefresh {
          
}
3.手动触发刷新
tableView.magiRefresh.header?.beginRefreshing()
tableView.magiRefresh.footer?.beginRefreshing()
4.结束刷新
/*
一般方式结束刷新
*/
func endRefreshing()
 
/*
结束刷新且需要提示文字
*/
func endRefreshingWithAlertText(_ text: String = "", completion: (()->())?)

/*
结束刷新且不再需要刷新功能
*/
func endRefreshingAndNoLongerRefreshingWithAlertText(_ text: String)
5.重新恢复刷新
/**
 当调用过 ‘endRefreshingAndNoLongerRefreshingWithAlertText’,
且重新需要恢复刷新功能室,调用下面方法
*/
func resumeRefreshAvailable()

自定义

以MagiRefreshHeaderConrol为例:

override func setupProperties() {
       super.setupProperties()
       //初始化属性
}
	
 
override func magiDidScrollWithProgress(progress: CGFloat, max: CGFloat) {
       //进度回调
}

override func magiRefreshStateDidChange(_ status: MagiRefreshStatus) {
        super.magiRefreshStateDidChange(status)
	     switch status {
        case .none:
            break
        case .scrolling:
            break
        case .ready:
            break
        case .refreshing:
            break
        case .willEndRefresh:
            break
        }
 }

小记

这个框架呢,是我最近在写一个新的项目Swift,因为是新的所以说有的东西动用比较新的技术,但是我看到了MJRefresh这个OC框架不能忍,我看了挺多的Swift的下拉刷新框架都觉得不是很好,但是不久之前看到了一个OC的框架KafkaRefresh,我决定修改一下架构然后重写了一个Swift板的,当然架构还是有所不同的但是样式是一样的

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].