首页 > 编程语言 >直播平台源码,自定义下拉刷新控件

直播平台源码,自定义下拉刷新控件

时间:2023-11-01 14:11:41浏览次数:32  
标签:控件 indicator 自定义 self refreshingBlock init 源码 make equalToSuperview

直播平台源码,自定义下拉刷新控件

 

import Foundation
import UIKit
import SnapKit
class XRefreshControl: UIRefreshControl {
    var observation: NSKeyValueObservation?
    var isLocalRefreshing: Bool = false
    let indicator = UIProgressView(progressViewStyle: .bar)
    var refreshingBlock: (()->Void)?
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        observation = observe(
            \.frame,
             options: .new
        ) { [weak self] object, change in
            if self?.isRefreshing == true {
                if self?.isLocalRefreshing == false {
                    if self?.refreshingBlock != nil {
                        self?.refreshingBlock!()
                    }
                }
                self?.isLocalRefreshing = true
            } else {
                let height = change.newValue!.height
                self?.indicator.progress = min(Float(abs(height / 60)), 1)
            }
        }
    }
    convenience init(refreshingBlock: @escaping ()->Void) {
        self.init(frame: .zero)
        
        self.refreshingBlock = refreshingBlock
        
        self.layer.masksToBounds = true
        self.backgroundColor = .red
        
        let v = UIView()
        v.backgroundColor = .red
        
        let center = UIView()
        v.addSubview(center)
        
        let title = UILabel()
        title.text = "加载中"
        title.textColor = .black
        center.addSubview(title)
        
        indicator.layer.masksToBounds = true
        center.addSubview(indicator)
        
        self.addSubview(v)
        v.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
        center.snp.makeConstraints { make in
            make.center.equalToSuperview()
            make.width.equalToSuperview()
        }
        indicator.snp.makeConstraints { make in
            make.top.equalToSuperview()
            make.width.height.equalTo(32)
            make.centerX.equalToSuperview()
        }
        title.snp.makeConstraints { make in
            make.top.equalTo(indicator.snp.bottom)
            make.bottom.equalToSuperview()
            make.centerX.equalToSuperview()
        }
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    deinit {
        observation = nil
    }
    
    override func endRefreshing() {
        super.endRefreshing()
        
        self.isLocalRefreshing = false
        indicator.progress = 0
    }
}
extension UITableView {
    func endRefreshing() {
        if ((self.refreshControl?.isKind(of: XRefreshControl.self)) != nil) {
            self.refreshControl?.endRefreshing()
        }
    }
}

以上就是直播平台源码,自定义下拉刷新控件, 更多内容欢迎关注之后的文章

 

标签:控件,indicator,自定义,self,refreshingBlock,init,源码,make,equalToSuperview
From: https://www.cnblogs.com/yunbaomengnan/p/17802972.html

相关文章

  • C# 控件基础1 | 从多态角度理解、遍历菜单栏控件ToolSplit
    一、文章背景1.多态简单描述多态是同一个行为,具有不同的结果。比如都是“叫”,而狗和猫的叫法,声波等形态不一样。多态离不开重载,利用重载某个方法实现其在派生类自己的功能。在C#中,每个类型都是多态的,因为包括用户定义类型在内的所有类型都继承自Object。2.多态在开发中的应......
  • C#中menuStrip1控件详细使用方法
    在C#中,MenuStrip控件用于创建一个菜单栏,允许用户通过点击菜单项来执行相应的操作。MenuStrip提供了一种方便的方式来创建和管理菜单项及其事件处理程序。以下是MenuStrip控件的详细使用方法:在窗体上放置MenuStrip控件:在VisualStudio的窗体设计器中,从工具箱中拖动并放置一个......
  • LIMS系统源码:从样品登记到检验全面管理实验室流程
    LIMS可用于管理完整的实验程序,从样品登记到检验、校核、审核到最终批准报告,建立在过程质量控制的基础上,对检测流程进行有效全面的管理,对影响质量的人、机、料、法、环因素加以控制,同时为质量改进提供数据依据。LIMS实验室信息管理系统,功能包括以下几个模块:委托管理:样品登记、样品接......
  • streamlit控件和控制1
    streamlit控件和控制目录streamlit控件和控制元素控件状态元素st.button特性切换按钮控制流动态增删元素常见错误参考资料元素控件button: #按钮download_button:#文件下载file_uploader: #文件上传checkbox: #复选框radio: #单选框selectbox: #下拉......
  • streamlit控件和控制2
    streamlit控件和控制2目录streamlit控件和控制2st.radiost.selectboxst.multiselectst.select_sliderst.sliderst.progress参考资料button: #按钮download_button:#文件下载file_uploader: #文件上传checkbox: #复选框toggle:#切换框radio: #......
  • Kamailio 源码编译
    Kamailio源码编译一、环境1、OS:Debianbullseye2、版本:Kamailio-5.7.23、MySQL5.7 二、编译1、在Kamailio-5.7.2目录下执行如下指令,生产modules.lst文件makeFLAVOUR=kamailiocfg2、打开modules.lst文件,找到exclude_modules,将等号后面的db_mysql删除。然后执行编译......
  • 界面控件DevExpress WinForms Gauge组件 - 实现更高级别数据可视化
    DevExpressWinForms控件包含了超过150个随时可用的仪表盘预设,包括圆形,数字,线性和状态指示器等,来帮助用户实现更高级的数据可视化。DevExpressWinForms有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用程序,无论是......
  • [win]Surface book2 添加自定义分辨率
    surfacebook213.5英寸 是3:2的屏幕,因为默认分辨率3000*2000实在是太高了,看字的时候眼睛有点吃不消 即使开启windows的自定义缩放也有点难受,同时在个性化里面,内置的分辨率居然没有3:2的了...加上windows的文字渲染机制,在高分辨率下开启cleartype后汉字开始有虚边了,所以决定......
  • Unreal入门,通过蓝图自定义Pawn移动
    1.自定义Pawn新建Pawn添加相机和网格体网格体设置(新建项目自带资源里随便挑一个)相机设置(主要是旋转和位移,随便设置下,大概能达到俯视效果就行,其它效果也可以,只要能看到自己的Pawn,不然不知道怎么动的)2.应用自定义Pawn(默认GameMode不可编辑,不能直接替换Default......
  • 掌握《Android Framework源码开发揭秘》,成为移动开发领域的领跑者
    前言前两天被一条消息给震惊到了:阿里上半年裁员超1.36万人,今年将新增近6000名应届大学生。差点以为阿里扛不住了。。。。裁员这个事大家应该见怪不怪,这两年,我们已经被一波又一波的裁员浪潮,冲激得可以说是麻木了,但是1.36万这个数字还是挺吓人的。对于企业来说,这是调整经营策略、优化......