阅读MJRefresh源码学到的知识点

1.利用Runtime给category中增加属性

category可以访问类中的已有的属性,但不能新增加属性。使用runtime实现新增属性mj_header,代码如下:

- (void)setMj_header:(MJRefreshHeader *)mj_header

{

if (mj_header != self.mj_header) {

// 删除旧的,添加新的

[self.mj_header removeFromSuperview];

[self insertSubview:mj_header atIndex:0];

// 存储新的

[self willChangeValueForKey:@"mj_header"]; // KVO

objc_setAssociatedObject(self, &MJRefreshHeaderKey,

mj_header, OBJC_ASSOCIATION_ASSIGN);

[self didChangeValueForKey:@"mj_header"]; // KVO

}

}

- (MJRefreshHeader *)mj_header

{

return objc_getAssociatedObject(self, &MJRefreshHeaderKey);

}

2.UIScrollview的contentInset属性

大家经常用到的是offset属性和contentsize属性,很少关注contentInset这个属性。

contentSize是UIScrollView可以滚动的区域(CGSize),offset是UIScrollViw滚动的距离(CGPoint)

而contentInset是UIScrollView上下左右四个方位额外扩展的区域(UIEdgeInsets),默认值是UIEdgeInsetZero

3.KVO,监听UIScrollview的offset属相,达到一定值的时候,做相应的处理。

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

推荐阅读更多精彩内容

  • MJRefresh是流行的下拉刷新控件,前段时间为了修复一个BUG,读了它的源码,本文总结一下实现的原理 下拉刷新...
    晚安的你我阅读 473评论 0 0
  • 可改进部分 在 MJRefreshComponent.h 的 34 行, typedef void (^MJRef...
    在梦里失眠阅读 534评论 0 0
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,875评论 0 9
  • 下拉刷新和上拉载入的原理非常多App中,新闻或者展示类都存在下拉刷新和上拉载入的效果,网上提供了实现这样的效果的第...
    狼之独步阅读 1,374评论 0 3
  • MJRefresh是李明杰老师的作品,到现在已经有9800多颗star了,是一个简单实用,功能强大的iOS下拉刷新...
    Style_mao阅读 696评论 1 2