iOS 개발 TableView 이미지 최적화
http://www.2cto.com/kf/201504/392433.html, https://developer.apple.com/library/prerelease/content/samplecode/LazyTableImages/Introduction/Intro.html#):1.더 가 벼 운 layer 를 사용 하여 그림 을 표시 합 니 다.2.고정 크기 의 그림 을 다시 만 듭 니 다.3.tableView 가 굴 러 갈 때 그림 다운 로드 를 하지 않 습 니 다(직접 차지 하 는 그림 표시).스크롤 을 멈 출 때 그림 다운 로드 를 진행 합 니 다.현재 세 번 째 방법 은 다음 과 같 습 니 다.주요 코드:1.속성 정의
@property (nonatomic, strong) NSArray *array;
@property (nonatomic, strong) NSMutableArray *downImageArray;
@property (nonatomic, weak) UITableView *tableView;
2、viewDidLoad
- (void)viewDidLoad {
[super viewDidLoad];
_downImageArray = [NSMutableArray array];
UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
tableView.delegate = self;
tableView.dataSource = self;
[tableView registerNib:[UINib nibWithNibName:@"TableViewCell" bundle:nil] forCellReuseIdentifier:@"cell"];
[self.view addSubview:tableView];
_tableView = tableView;
_array = @[@"http://app.fssgjz.cn:5287/agent/M22quanmiannengfu.png",
@"http://app.fssgjz.cn:5287/agent/5Ayishufengx.png",
@"http://app.fssgjz.cn:5287/agent/fengxiong.png",
@"http://app.fssgjz.cn:5287/agent/quban.png",
@"http://app.fssgjz.cn:5287/agent/meibi.png",
@"http://app.fssgjz.cn:5287/agent/meifu.png",
@"http://app.fssgjz.cn:5287/agent/huanyanshu.png",
@"http://app.fssgjz.cn:5287/agent/baogongshu.png",
@"http://app.fssgjz.cn:5287/agent/action_ticket_main.png",
@"http://app.fssgjz.cn:5287/agent/action_choose_zr.png",
@"http://app.fssgjz.cn:5287/agent/action_choose_main2.png",
@"http://app.fssgjz.cn:5287/agent/M22quanmiannengfu.png",
@"http://app.fssgjz.cn:5287/agent/5Ayishufengx.png",
@"http://app.fssgjz.cn:5287/agent/fengxiong.png",
@"http://app.fssgjz.cn:5287/agent/quban.png",
@"http://app.fssgjz.cn:5287/agent/meibi.png",
@"http://app.fssgjz.cn:5287/agent/meifu.png",
@"http://app.fssgjz.cn:5287/agent/huanyanshu.png",
@"http://app.fssgjz.cn:5287/agent/baogongshu.png",
@"http://app.fssgjz.cn:5287/agent/action_ticket_main.png",
@"http://app.fssgjz.cn:5287/agent/action_choose_zr.png",
@"http://app.fssgjz.cn:5287/agent/action_choose_main2.png",
@"http://app.fssgjz.cn:5287/agent/M22quanmiannengfu.png",
@"http://app.fssgjz.cn:5287/agent/5Ayishufengx.png",
@"http://app.fssgjz.cn:5287/agent/fengxiong.png",
@"http://app.fssgjz.cn:5287/agent/quban.png",
@"http://app.fssgjz.cn:5287/agent/meibi.png",
@"http://app.fssgjz.cn:5287/agent/meifu.png",
@"http://app.fssgjz.cn:5287/agent/huanyanshu.png",
@"http://app.fssgjz.cn:5287/agent/baogongshu.png",
@"http://app.fssgjz.cn:5287/agent/action_ticket_main.png",
@"http://app.fssgjz.cn:5287/agent/action_choose_zr.png",
@"http://app.fssgjz.cn:5287/agent/action_choose_main2.png",
@"http://app.fssgjz.cn:5287/agent/M22quanmiannengfu.png",
@"http://app.fssgjz.cn:5287/agent/5Ayishufengx.png",
@"http://app.fssgjz.cn:5287/agent/fengxiong.png",
@"http://app.fssgjz.cn:5287/agent/quban.png",
@"http://app.fssgjz.cn:5287/agent/meibi.png",
@"http://app.fssgjz.cn:5287/agent/meifu.png",
@"http://app.fssgjz.cn:5287/agent/huanyanshu.png",
@"http://app.fssgjz.cn:5287/agent/baogongshu.png",
@"http://app.fssgjz.cn:5287/agent/action_ticket_main.png",
@"http://app.fssgjz.cn:5287/agent/action_choose_zr.png",
@"http://app.fssgjz.cn:5287/agent/action_choose_main2.png"
];
}
3.tableView 코드 sdwebimage 는 다운로드 한 그림 에 캐 시 역할 을 합 니 다.downImageArray 는 이미 다운로드 한 NSIndxPath 를 저장 하 는 데 사 용 됩 니 다.tableView 속성 isDragging 은 빠르게 굴 러 가 고 있 음 을 표시 합 니 다.isDecelerating 은 느 린 속도 로 굴 러 가 고 있 음 을 표시 합 니 다.tableView 가 굴 러 가 고 있 고 이 cell 의 그림 이 다운로드 되 지 않 았 을 때 자리 잡 은 그림 을 직접 표시 합 니 다.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
TableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];
if ((self.tableView.isDragging || self.tableView.isDecelerating) && ![self.downImageArray containsObject:indexPath]) {
cell.iconView.image = [UIImage imageNamed:@"1.jpg"];
return cell;
}
[cell.iconView sd_setImageWithURL:[NSURL URLWithString:_array[indexPath.row]] placeholderImage:[UIImage imageNamed:@"1.jpg"] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
if (![self.downImageArray containsObject:indexPath]) {
[self.downImageArray addObject:indexPath];
}
}];
return cell;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return 89.0;
}
5.tableView 스크롤,리 셋 처리
// ,
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if (!decelerate) {
[self reload];
}
}
//
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
[self reload];
}
//
- (void)reload {
NSArray *arr = [self.tableView indexPathsForVisibleRows];
// indexpath
NSMutableArray *arrToReload = [NSMutableArray array];
for (NSIndexPath *indexPath in arr) {
// cell
if (![self.downImageArray containsObject:indexPath]) {
[arrToReload addObject:indexPath];
}
}
[self.tableView reloadRowsAtIndexPaths:arrToReload withRowAnimation:UITableViewRowAnimationNone];
}
// cell
- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
TableViewCell *tableViewCell = (TableViewCell *)cell;
[tableViewCell.iconView sd_cancelCurrentImageLoad];
}
애플 문서 에 도 이런 자료 가 있 습 니 다.https://developer.apple.com/library/prerelease/content/samplecode/LazyTableImages/Introduction/Intro.html#
또한 일부 앱 은 더 원활 하 게 사용 하기 위해 tableView 가 빠르게 스크롤 하거나 스크롤 할 때 데 이 터 를 불 러 오지 않 습 니 다.vvebo 는 이렇게 처 리 됩 니 다.vvebo 주소:https://github.com/johnil/VVeboTableViewDemo
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.