点击这里查看源码
下面简单介绍下架构
第一层:#####
基类 XZHRefreshView
定义公共方法,属性。
@interface XZHRefreshView : UIView
@property (weak, nonatomic) id refreshingTarget;
@property (assign, nonatomic) SEL refreshingAction;
/** 记录scrollView刚开始的inset */
@property (assign, nonatomic) UIEdgeInsets scrollViewOriginalInset;
/** 父控件 */
@property (nonatomic, weak) UIScrollView *scrollView;
/**刷新状态**/
@property (nonatomic, assign) XZHRefreshState state;
/** 进入刷新状态 */
- (void)beginRefreshing;
/** 结束刷新状态 */
- (void)endRefreshing;
@end
在- (void)willMoveToSuperview:(UIView *)newSuperview
方法中添加观察者监听视图的状态
第二层:#####
XZHRefreshFooterView,XZHRefreshHeaderView
设置控件在视图中的位置,检测视图的偏移量,根据偏移量来改变控件的状态,控制各种状态下的偏移量。
在- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
方法中检测偏移量,根据偏移量设置控件的状态。在state
的setter
方法中改变各种状态的偏移量。
这样做的好处是以后各种UI效果的刷新控件都可以继承这个类,只完成UI效果就可以了。
第三层:#####
这里定制控件视图的UI效果,在state的setter方法中改变各种状态的UI效果与动画。
第四层:#####
使用scrollview
的category
,提供方便scrollview
调用的接口。