記憶體優化之封裝九宮格

2021-09-06 23:30:04 字數 3387 閱讀 3724

1、為了達到更好的效果我們不用uitableview,首先我們要通過xib自定義乙個和文字如圖:

2、自定義主檢視jrmainscrollview,通過協議**來實現功能,做法和uitableview類似,大家可以參考一下uitableview

首先:我們要定義資料源協議

//

資料來源協議

@protocol jrmainscrolldatasource //

獲取總的數量

-(nsinteger) numberofitems;

//獲取列的數量

-(nsinteger) numberofcolumsofrow;

//獲取item

- (uiview *) mainscrollview:(jrmainscrollview *)mainscrollview itematindex:(nsinteger) index;

@end

其次:我們要定義屬性協議

//

屬性協議

@protocol jrmainscrolldelegate @optional

//獲取高度

- (cgfloat) heightforitematview:(jrmainscrollview *) mainscrollview;

//獲取寬度

- (cgfloat) widthforitematview:(jrmainscrollview *) mainscrollview;

//獲取間距

- (cgfloat) mainscrollview:(jrmainscrollview *)mainscrollview spaceforitemwithtype:(kjrmainscrollitemspace)type;

@end

注意獲取間距包括到左右的間距和上下的間距通過定義乙個列舉實現

typedef enum

kjrmainscrollitemspace;

3、內部布局實現,計算出當前所有的frame,並且放入陣列在此期間,用的的屬性引數都需要從**來獲取,**如下

//

載入子檢視

- (void

)_loadsubviews

self.contentsize=cgsizemake(0

, cgrectgetmaxy([[self.array lastobject] cgrectvalue]));

self.showsverticalscrollindicator=no;

}

4、判斷當前的frame是不是在當前的螢幕可視範圍之內,如果要是在的進行檢視的渲染,如果不在不予理睬。

-(void

)layoutsubviews

}else

if(tempview)

}//判斷是不是在視野內部,其中有兩種情況,y值在螢幕內部,或者maxy值在螢幕內部

-(bool) isinscreenwith:(cgrect) frame

return

no; }

5、操作緩衝池重複利用物件

/*

* 存放frame

*/@property(nonatomic,strong) nsmutablearray *array;

/** 存放當前顯示的物件

*/@property(nonatomic,strong) nsmutabledictionary *current;

/** 存放緩衝池物件

*/@property(nonatomic,strong) nsmutableset *pool;/**

* 獲取重複利用的物件

* * @param identy

* * @return */

- (jrrectview *) dequeuereuseditemwithidenty:(nsstring *) identy

return

view;

}

6、在主控制器載入檢視並實現**方法即可

//

載入所有資料

- (void

) _loadsubviews

#pragma mark - 資料來源方法

-(nsinteger)numberofitems

-(nsinteger) numberofcolumsofrow

-(uiview *) mainscrollview:(jrmainscrollview *)mainscrollview itematindex:(nsinteger)index

cell.titlelabel.text=[nsstring stringwithformat:@""];

nsstring * imagename=[nsstring stringwithformat:@"

%d",arc4random_uniform(20)+256

]; uiimage *image=[uiimage imagenamed:imagename];

cell.image.image=image;

return

cell;

}#pragma mark - **方法

//獲取高度

- (cgfloat) heightforitematview:(jrmainscrollview *) mainscrollview

//獲取寬度

- (cgfloat) widthforitematview:(jrmainscrollview *) mainscrollview

//獲取間距

- (cgfloat) mainscrollview:(jrmainscrollview *)mainscrollview spaceforitemwithtype:(kjrmainscrollitemspace)type

else

if (type==kjrmainscrollitemtopspace)

return20;

}

,親自執行測試。

疑問諮詢或技術交流,**入官方qq群:

傑瑞教育

出處:

本文版權歸煙台傑瑞教育科技****

記憶體優化之封裝九宮格

1 為了達到更好的效果我們不用uitableview,首先我們要通過xib自定義乙個和文字如圖 2 自定義主檢視jrmainscrollview,通過協議 來實現功能,做法和uitableview類似,大家可以參考一下uitableview 首先 我們要定義資料源協議 資料來源協議 protocol...

九宮格布局

2009 08 25 15 15 27 九宮格是一種比較古老的設計,它最基本的表現其實就像是乙個三行三列的 其實它最初是在window的c s結構中用得比較多,比如我們經常看 到軟體中的乙個窗體,其實就是乙個九宮格的典型應用,因為窗體需要在八個方向拉伸,所以在c s軟體中大量採用這種技術來布局設計。...

九宮格問題

include include stl 雙端佇列容器 include include pos.h using namespace std ofstream fout sudoku.txt deque d int lay deque d int checkout pos p,int n int sud...