登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

Swift版Refresh(可以自定义多种样式)架构方面有所优化

[复制链接]
来自: 蚂蚁安然 分类: iOS精品源码 上传时间: 2018-9-29 14:36:49
Tag:

项目介绍:

Screenshots

MagiRefreshStyle Top Screenshots Bottom Screenshots
native <img src="Assets/Gif/native.gif"></img> <img src="Assets/Gif/_native.gif"></img>
replicatorWoody <img src="Assets/Gif/woody.gif"></img> <img src="Assets/Gif/_woody.gif"></img>
replicatorAllen <img src="Assets/Gif/allen.gif"></img> <img src="Assets/Gif/_allen.gif"></img>
replicatorCircle <img src="Assets/Gif/circle.gif"></img> <img src="Assets/Gif/_circle.gif"></img>
replicatorDot <img src="Assets/Gif/dot.gif"></img> <img src="Assets/Gif/_dot.gif"></img>
replicatorArc <img src="Assets/Gif/arc.gif"></img> <img src="Assets/Gif/_arc.gif"></img>
replicatorTriangle <img src="Assets/Gif/triangle.gif"></img> <img src="Assets/Gif/_triangle.gif"></img>
animatableRing <img src="Assets/Gif/ring.gif"></img> <img src="Assets/Gif/_ring.gif"></img>
animatableArrow <img src="Assets/Gif/arrow.gif"></img> <img src="Assets/Gif/_arrow.gif"></img>

特点

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

总共有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.refreshClosure = { [weak self] in
                
       }
     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板的,当然架构还是有所不同的但是样式是一样的

    相关源码推荐:

    我来说两句
    *滑动验证:
    所有评论(5)
    BlueManlove 2018-9-30 09:54:07
    内容很好,棒棒哒
    回复
    莫应有道 2018-9-30 09:54:18
    膜拜大神~
    回复
    应用安卓 2018-9-30 09:54:26
    感谢大神分享,必须顶!
    回复
    码农创新者 2018-9-30 09:54:27
    感谢大神分享,必须顶!
    回复
    Rf2698 2018-9-30 09:54:33
    小弟学习了~支持,支持
    回复
    A7472 2018-9-30 09:54:39
    膜拜大神~
    回复
    泡泡蓝精灵 2018-9-30 10:11:33
    精华内容,楼主V5!
    回复
    蚂蚁安然 2018-9-30 11:06:17
    很给力,Code4App有你更精彩!
    回复
    code4app热心网友 2018-9-30 15:14:10
    很给力,Code4App有你更精彩!
    回复
    提取码:  下载次数:26 状态:已购或VIP 售价:0(原价:15)金钱 下载权限:初级码农 
    677 0 26
    联系我们
    首页/微信公众账号投稿

    帖子代码编辑/版权问题

    QQ:435399051,742864542

    如何获得代码达人称号?

    代码贡献英雄榜
    用户名 下载数
    通过邮件订阅最新 Code4App 信息
    上一条 /4 下一条
    联系我们
    关闭
    合作电话:
    13802416937
    Email:
    435399051@qq.com
    商务市场合作/投稿
    问题反馈及帮助
    联系我们

    广告投放| 广东互联网违法和不良信息举报中心|中国互联网举报中心|Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

    快速回复 返回顶部 返回列表