亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

內存優化之封裝九宮格

2019-11-14 18:57:21
字體:
來源:轉載
供稿:網友

  隨著市場上越來越多的APP上線,好多軟件對手機的內存要求也是很大,所以我們在開發的時候一定要掌握如何去優化內存,將自己的APP盡可能優化。今天我們就一起看一下九宮格的優化。下面是軟件的截圖

 

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

  2、自定義主視圖JRMainScrollView,通過協議代理來實現功能,做法和UITableView類似,大家可以參考一下UITableView

  首先:我們要定義數據源協議

//數據源協議@PRotocol JRMainScrollDataSource <NSObject>//獲取總的數量- (NSInteger) numberOfItems;//獲取列的數量- (NSInteger) numberOfColumsOfRow;//獲取item- (UIView *) mainScrollView:(JRMainScrollView *)mainScrollView itemAtIndex:(NSInteger) index;@end

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

//屬性協議@protocol JRMainScrollDelegate <NSObject>@optional//獲取高度- (CGFloat)  heightForItemAtView:(JRMainScrollView *) mainScrollView;//獲取寬度- (CGFloat)  widthForItemAtView:(JRMainScrollView *) mainScrollView;//獲取間距- (CGFloat) mainScrollView:(JRMainScrollView *)mainScrollView spaceForItemWithType:(kJRMainScrollItemSpace)type;@end

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

typedef enum{    kJRMainScrollItemLeftSpace,    kJRMainScrollItemTopSpace} kJRMainScrollItemSpace;

  3、內部布局實現,計算出當前所有的frame,并且放入數組在此期間,用的的屬性參數都需要從代理來獲取,代碼如下

//加載子視圖- (void)_loadSubViews{    //獲取總個數和列數    NSInteger totalItems=[self.jrDataSource numberOfItems];    NSInteger colum=[self.jrDataSource numberOfColumsOfRow];        //獲取寬度和高度    CGFloat itemWidth=[self.jrDelegate widthForItemAtView:self];    CGFloat itemHeigt=[self.jrDelegate heightForItemAtView:self];        //獲取上下間距    CGFloat leftSpace=[self.jrDelegate mainScrollView:self spaceForItemWithType:kJRMainScrollItemLeftSpace];    CGFloat topSpace=[self.jrDelegate mainScrollView:self spaceForItemWithType:kJRMainScrollItemTopSpace];        CGFloat space=(kWidth-2*leftSpace-colum*itemWidth)/(colum-1)+itemWidth;        for (int i=0;i<totalItems;i++) {        int clo=i%colum;        int row=i/colum;        CGRect frame=CGRectMake(leftSpace+clo*space, 20+row*(itemHeigt+topSpace), itemWidth, itemHeigt);        [self.array addObject:[NSValue valueWithCGRect:frame]];        }self.contentSize=CGSizeMake(0, CGRectGetMaxY([[self.array lastObject] CGRectValue]));    self.showsVerticalScrollIndicator=NO;}

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

-(void)layoutSubviews{    [super layoutSubviews];        //循環便利獲取在屏幕中的frame    for (int i=0;i<self.array.count;i++) {        UIView * tempView=(UIView *)self.current[@(i)];                CGRect rect=[self.array[i] CGRectValue];        if ([self isInScreenWith:rect]) {            if(!tempView){//字典里沒有的才需要重重新加載                UIView *view=[self.jrDataSource mainScrollView:self itemAtIndex:i];                view.frame=rect;                [self.current setObject:view forKey:@(i)];                [self addSubview:view];            }               }else if(tempView){//如果存在字典而且不在視線內部的則移除            [self.current removeObjectForKey:@(i)];            [tempView removeFromSuperview];            [self.pool addObject:tempView];        }      }//判斷是不是在視野內部,其中有兩種情況,Y值在屏幕內部,或者MAXY值在屏幕內部- (BOOL) isInScreenWith:(CGRect) frame{    CGFloat setMiny=self.contentOffset.y;    CGFloat setMaxy=self.contentOffset.y+kHeight;        BOOL condition1=frame.origin.y>=setMiny&&frame.origin.y<=setMaxy;    BOOL condition2=CGRectGetMaxY(frame)>=setMiny&&CGRectGetMaxY(frame)<=setMaxy;        if(condition1||condition2){        return YES;    }        return NO;        }

  5、操作緩沖池重復利用對象

/** 存放frame*/@property(nonatomic,strong) NSMutableArray * array;/** 存放當前顯示的對象*/@property(nonatomic,strong) NSMutableDictionary * current;/** 存放緩沖池對象*/@property(nonatomic,strong) NSMutableSet * pool;/** *  獲取重復利用的對象 * *  @param identy <#identy description#> * *  @return <#return value description#> */- (JRRectView *) dequeueReusedItemWithIdenty:(NSString *) identy{    JRRectView * view=[self.pool anyObject];    if (view!=nil) {        [self.pool removeObject:view];    }    return view;}

  6、在主控制器加載視圖并實現代理方法即可

 //加載所有數據- (void) _loadSubviews{        //1 增加滾動視圖    JRMainScrollView * mainScroll=[[JRMainScrollView alloc] initWithFrame:self.view.bounds];    mainScroll.jrDataSource=self;    mainScroll.jrDelegate=self;    [mainScroll reloadViews];    [self.view addSubview:mainScroll];}#pragma mark - 數據源方法-(NSInteger)numberOfItems{    return 132;}-(NSInteger) numberOfColumsOfRow{    return 3;}-(UIView *) mainScrollView:(JRMainScrollView *)mainScrollView itemAtIndex:(NSInteger)index{     JRRectView *cell=[mainScrollView dequeueReusedItemWithIdenty:@"test"];    if (cell==nil) {        cell=[[[NSBundle mainBundle] loadNibNamed:@"rect" owner:nil options:nil] lastObject];    }    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{   return 100;}//獲取寬度- (CGFloat)  widthForItemAtView:(JRMainScrollView *) mainScrollView{    return 90;}//獲取間距- (CGFloat) mainScrollView:(JRMainScrollView *)mainScrollView spaceForItemWithType:(kJRMainScrollItemSpace)type{        if (type==kJRMainScrollItemLeftSpace) {        return 20;    }else if (type==kJRMainScrollItemTopSpace){        return 20;    }    return 20;    }

 

  想要了解更多內容的小伙伴,可以點擊查看源碼,親自運行測試。

  疑問咨詢或技術交流,請加入官方QQ群:JRedu技術交流 (452379712)

 

作者:杰瑞教育
出處:http://www.49028c.com/jerehedu/ 
本文版權歸煙臺杰瑞教育科技有限公司和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲网在线观看| 成人精品一区二区三区电影免费| 国产精品极品美女在线观看免费| 精品国产欧美一区二区三区成人| 成人日韩在线电影| 亚洲女人天堂视频| 欧美亚洲第一页| 亚洲男人天堂久| 日韩www在线| 精品久久久久久久中文字幕| 日韩美女中文字幕| 高跟丝袜一区二区三区| 97久久伊人激情网| 亚洲综合精品一区二区| 亚洲成人a**站| 欧美电影免费观看高清| 日韩精品视频在线播放| 日韩av片永久免费网站| 欧美最顶级丰满的aⅴ艳星| 91牛牛免费视频| 成人信息集中地欧美| 亚洲免费成人av电影| 久久国产精品久久久久久久久久| 欧美激情18p| 日韩成人久久久| 91影院在线免费观看视频| 成人性生交大片免费观看嘿嘿视频| 在线观看欧美日韩| 久久久久久18| 欧美成人剧情片在线观看| 97精品久久久中文字幕免费| 岛国av一区二区三区| 国产黑人绿帽在线第一区| 欧美性开放视频| 久久久久久国产精品三级玉女聊斋| 亚洲乱码国产乱码精品精| 亚洲激情视频在线播放| 国产精品18久久久久久麻辣| 中文字幕亚洲一区二区三区五十路| 亚洲人成网站色ww在线| 精品久久久久久国产91| 国产精品直播网红| 国产精品视频一区二区高潮| 6080yy精品一区二区三区| 日韩av影院在线观看| 欧美老妇交乱视频| 国产精品视频99| 成人疯狂猛交xxx| 日韩精品久久久久| 91日韩在线视频| 欧美性猛交xxxx免费看| 中文字幕日韩在线观看| 在线观看欧美日韩| 91精品国产91| 在线视频精品一| 不卡毛片在线看| 91禁外国网站| 亚洲欧美一区二区三区在线| 欧美大片大片在线播放| 亚洲香蕉成人av网站在线观看| 色av中文字幕一区| 久久久久久久影院| 中文字幕av一区二区三区谷原希美| 91国内免费在线视频| 亚洲欧美日本伦理| 久久综合五月天| 国产成人在线视频| 一区二区亚洲精品国产| 国产91成人在在线播放| 精品久久香蕉国产线看观看gif| 57pao国产精品一区| 国产精品 欧美在线| 欧美激情免费视频| 欧美亚洲国产日韩2020| 欧美日韩一区二区免费视频| 国产成人福利视频| 欧美精品激情在线观看| 国产成人精品久久二区二区91| 国产ts人妖一区二区三区| 欧美激情视频一区二区三区不卡| 亚洲理论电影网| 81精品国产乱码久久久久久| 成人欧美一区二区三区黑人孕妇| 都市激情亚洲色图| 久久久国产精彩视频美女艺术照福利| 不卡在线观看电视剧完整版| 欧美日韩国产专区| 欧美伊久线香蕉线新在线| 欧美福利视频在线| 国产精品69精品一区二区三区| 欧美日韩性视频在线| 国产精品99导航| 丝袜美腿亚洲一区二区| 国产亚洲精品激情久久| 91精品国产综合久久香蕉922| 日韩成人中文电影| 国产一区二区三区三区在线观看| 成人日韩av在线| 亚洲天堂网站在线观看视频| 亚洲国语精品自产拍在线观看| 久久久久久久av| 亚洲国产精品大全| 77777亚洲午夜久久多人| 少妇激情综合网| 午夜精品久久久久久久男人的天堂| 国产va免费精品高清在线| 久久久国产视频| 欧美成人午夜影院| 亚洲人成网站色ww在线| 成人免费福利在线| 久久99精品国产99久久6尤物| 国产精品一区二区久久国产| 日日狠狠久久偷偷四色综合免费| 欧美大片免费观看| 国产一区av在线| 国产999精品久久久| 国产精品jvid在线观看蜜臀| 国产成人精品久久二区二区91| 亚洲精品成a人在线观看| 91久久久亚洲精品| 久久精品中文字幕电影| 日韩大片在线观看视频| 久久影院中文字幕| 美女视频黄免费的亚洲男人天堂| 国产精品第七十二页| 欧美电影免费观看电视剧大全| 欧美视频13p| 亚洲成色www8888| 一区二区三区四区在线观看视频| 精品无人区太爽高潮在线播放| 精品久久久久久久大神国产| 欧美黑人巨大xxx极品| 欧美视频在线看| 日韩大陆欧美高清视频区| 欧美日韩国产123| 亚洲激情在线观看| 欧美亚洲在线播放| 成人免费在线网址| 精品成人国产在线观看男人呻吟| 亚洲欧洲午夜一线一品| 中文字幕欧美精品在线| 自拍偷拍亚洲欧美| 日韩电影免费观看在线| 亚洲二区在线播放视频| 狠狠爱在线视频一区| 成人免费激情视频| 搡老女人一区二区三区视频tv| 国产欧美在线看| 91精品久久久久久| 国产亚洲一区二区在线| 日韩精品极品视频免费观看| 日韩精品在线免费播放| 亚洲精品大尺度| 国产美女高潮久久白浆| 国产91精品黑色丝袜高跟鞋| 亚洲人成电影在线| 午夜精品在线视频| 久久99久久亚洲国产| 亚洲sss综合天堂久久| 亚洲人线精品午夜| 日本精品久久电影| 亚洲人成在线一二| 亚洲影影院av| 日韩免费观看在线观看|