iOS MJRefres自定义下拉控件
//
// PullDownRefreshHeader.swift
// greeMall
//
// Created by fuzhongw on 2021/11/13.
// Copyright © 2021 com.gree. All rights reserved.
//
importUIKit
importRxSwift
importRxCocoa
class PullDownRefreshHeader: MJRefreshHeader {
// 转圈的菊花
varstateLabel:UILabel= {
letlabel =UILabel()
label.textColor= .x999999
label.font= .pingFangMedium(size:12)
returnlabel
}()
// 下拉的icon
vararrowImage:UIImageView= {
letimageView =UIImageView()
imageView.image=UIImage(named:"icon_pull_down")
returnimageView
}()
// 下拉的icon
varcontentView:UIView= {
letv =UIView()
returnv
}()
// 处理不同刷新状态下的组件状态
overridevarstate: MJRefreshState {
didSet{
switchstate{
case.idle:
self.stateLabel.text="松开刷新"
self.stopArrowView()
case.pulling:
self.startArrowView()
self.stateLabel.text="松开刷新"
case.refreshing:
self.stateLabel.text="刷新中"
default:
print("")
}
}
}
override func prepare() {
super.prepare()
self.addSubview(self.contentView)
self.contentView.addSubview(self.stateLabel)
self.contentView.addSubview(self.arrowImage)
self.arrowImage.frame=CGRect(x:0,y:0,width:20,height:20)
self.arrowImage.snp.makeConstraints { makein
make.left.equalToSuperview()
make.top.equalToSuperview()
make.bottom.equalToSuperview()
}
self.stateLabel.snp.makeConstraints { makein
make.right.equalToSuperview()
make.left.equalTo(self.arrowImage.snp_right).offset(10)
make.centerY.equalToSuperview()
}
self.contentView.snp.makeConstraints { makein
make.center.equalToSuperview()
}
}
// 组件定位
override func placeSubviews() {
super.placeSubviews()
}
private func stopArrowView() {
print("----22222222222--结束")
self.arrowImage.layer.removeAllAnimations()
}
private func startArrowView() {
print("----22222222222--开始")
rotateView()
}
private func rotateView() {
self.arrowImage.layer.removeAllAnimations()
let animation: CABasicAnimation = CABasicAnimation(keyPath: "transform.rotation.z")
animation.isRemovedOnCompletion = false
animation.fillMode=CAMediaTimingFillMode.forwards
animation.fromValue=0
animation.toValue= (Double.pi*2)
animation.duration=1.0
animation.repeatCount=Float(INT_MAX)
self.arrowImage.layer.add(animation, forKåey:"rotate")
}
}