點擊這里查看源碼
下面簡單介紹下架構(gòu)
第一層:#####
基類 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;
/**刷新狀態(tài)**/
@property (nonatomic, assign) XZHRefreshState state;
/** 進(jìn)入刷新狀態(tài) */
- (void)beginRefreshing;
/** 結(jié)束刷新狀態(tài) */
- (void)endRefreshing;
@end
在- (void)willMoveToSuperview:(UIView *)newSuperview
方法中添加觀察者監(jiān)聽視圖的狀態(tài)
第二層:#####
XZHRefreshFooterView,XZHRefreshHeaderView
設(shè)置控件在視圖中的位置,檢測視圖的偏移量,根據(jù)偏移量來改變控件的狀態(tài),控制各種狀態(tài)下的偏移量共郭。
在- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
方法中檢測偏移量,根據(jù)偏移量設(shè)置控件的狀態(tài)侦香。在state
的setter
方法中改變各種狀態(tài)的偏移量落塑。
這樣做的好處是以后各種UI效果的刷新控件都可以繼承這個類,只完成UI效果就可以了罐韩。
第三層:#####
這里定制控件視圖的UI效果憾赁,在state的setter方法中改變各種狀態(tài)的UI效果與動畫。
第四層:#####
使用scrollview
的category
散吵,提供方便scrollview
調(diào)用的接口龙考。