阅读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源码学到的知识点)