MJRefresh 源码

MJRefresh 源码

UML

MJRefresh UML图-2.png

实现方式:

MJRefreshComponent 中对ScrollView添加了监听 contentOffset contentSize, 和滑动手势 state

#pragma mark - KVO监听
- (void)addObservers
{
    NSKeyValueObservingOptions options = NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld;
    [self.scrollView addObserver:self forKeyPath:MJRefreshKeyPathContentOffset options:options context:nil];
    [self.scrollView addObserver:self forKeyPath:MJRefreshKeyPathContentSize options:options context:nil];
    self.pan = self.scrollView.panGestureRecognizer;
    [self.pan addObserver:self forKeyPath:MJRefreshKeyPathPanState options:options context:nil];
}

监听的实现交给子类。

#pragma mark - 交给子类们去实现
/** 初始化 */
- (void)prepare NS_REQUIRES_SUPER;
/** 摆放子控件frame */
- (void)placeSubviews NS_REQUIRES_SUPER;
/** 当scrollView的contentOffset发生改变的时候调用 */
- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change NS_REQUIRES_SUPER;
/** 当scrollView的contentSize发生改变的时候调用 */
- (void)scrollViewContentSizeDidChange:(NSDictionary *)change NS_REQUIRES_SUPER;
/** 当scrollView的拖拽状态发生改变的时候调用 */
- (void)scrollViewPanStateDidChange:(NSDictionary *)change NS_REQUIRES_SUPER;

其他

1、关键字:NS_REQUIRES_SUPER 子类没有调用父类方法是有警告。
2、MJRefresh 分了headerfooter 给子类实现,减少了代码的冗余。
3、通过KVO来实现,对scrollVIew的侵入性小。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • MJRefresh 下拉刷新第三方库,是一个功能强大简单实用的下拉刷新控件。 整个框架逻辑清晰,类之间的解耦做的很...
    吴佩在天涯阅读 1,013评论 0 16
  • MJRefresh是李明杰老师的作品,到现在已经有9800多颗star了,是一个简单实用,功能强大的iOS下拉刷新...
    Style_mao阅读 693评论 1 2
  • 1.前言 MJRefresh 是日常 iOS 开发中使用频率比较高的一款下拉刷新/上拉加载更多的第三方控件,平时似...
    RiverSea阅读 1,424评论 0 10
  • 本文转载自J_Knight 的MJRefresh源码解析 MJRefresh是李明杰的作品,到现在已经有9800多...
    Detective41阅读 675评论 0 1
  • 空气的蓝还是淡淡的,浅浅的,孤挂着的半个明月,没什么点缀,只是下方的城际线也染着晕。透着玻璃全是冬的冷清,...
    志津阅读 373评论 0 4