閱讀MJRefresh源碼學(xué)到的知識(shí)點(diǎn)

1.利用Runtime給category中增加屬性

category可以訪問類中的已有的屬性,但不能新增加屬性。使用runtime實(shí)現(xiàn)新增屬性mj_header,代碼如下:

- (void)setMj_header:(MJRefreshHeader *)mj_header

{

if (mj_header != self.mj_header) {

// 刪除舊的,添加新的

[self.mj_header removeFromSuperview];

[self insertSubview:mj_header atIndex:0];

// 存儲(chǔ)新的

[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屬性

大家經(jīng)常用到的是offset屬性和contentsize屬性,很少關(guān)注contentInset這個(gè)屬性。

contentSize是UIScrollView可以滾動(dòng)的區(qū)域(CGSize),offset是UIScrollViw滾動(dòng)的距離(CGPoint)

而contentInset是UIScrollView上下左右四個(gè)方位額外擴(kuò)展的區(qū)域(UIEdgeInsets),默認(rèn)值是UIEdgeInsetZero

3.KVO,監(jiān)聽UIScrollview的offset屬相,達(dá)到一定值的時(shí)候,做相應(yīng)的處理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • MJRefresh是流行的下拉刷新控件,前段時(shí)間為了修復(fù)一個(gè)BUG,讀了它的源碼,本文總結(jié)一下實(shí)現(xiàn)的原理 下拉刷新...
    晚安的你我閱讀 515評(píng)論 0 0
  • 可改進(jìn)部分 在 MJRefreshComponent.h 的 34 行, typedef void (^MJRef...
    在夢(mèng)里失眠閱讀 546評(píng)論 0 0
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,067評(píng)論 0 9
  • 下拉刷新和上拉載入的原理非常多App中,新聞或者展示類都存在下拉刷新和上拉載入的效果,網(wǎng)上提供了實(shí)現(xiàn)這樣的效果的第...
    狼之獨(dú)步閱讀 1,421評(píng)論 0 3
  • MJRefresh是李明杰老師的作品,到現(xiàn)在已經(jīng)有9800多顆star了,是一個(gè)簡(jiǎn)單實(shí)用,功能強(qiáng)大的iOS下拉刷新...
    Style_mao閱讀 726評(píng)論 1 2

友情鏈接更多精彩內(nèi)容