我使用 uitableView 创建了一种 GRID。为此,我采用了各种标签来显示我正在使用线条图像的网格类型线条。因此,通过考虑 Grid,我的 tableview 大约有 88 列。
我的问题是当我向下滚动时,我得到了生涩的效果。它的性能很差。我正在创建大约 108 个标签,每行有 88 个标签和 86 个图像视图。
我需要遵循什么步骤来提高滚动性能???
我使用 clearColor 作为标签背景。但后来我删除了那些背景颜色。
我使用 uitableView 创建了一种 GRID。为此,我采用了各种标签来显示我正在使用线条图像的网格类型线条。因此,通过考虑 Grid,我的 tableview 大约有 88 列。
我的问题是当我向下滚动时,我得到了生涩的效果。它的性能很差。我正在创建大约 108 个标签,每行有 88 个标签和 86 个图像视图。
我需要遵循什么步骤来提高滚动性能???
我使用 clearColor 作为标签背景。但后来我删除了那些背景颜色。
您需要为表格单元格提供重用标识符。否则,每次创建一个全新的单元格并消耗越来越多的内存。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *const kReuseIdentifer = @"ReuseIdentifer";
UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kReuseIdentifier] autorelease];
}
return cell;
}
再次阅读您的问题后,我认为您正在使用非常宽的表格视图水平和垂直滚动。如果是这种情况,那么您需要切换到 UIScrollView 并将每个项目附加到此视图。UIScrollView 只会加载可见的视图并提供您想要的滚动性能。
避免这种情况很重要:
// Using ARC, therefore no release on the UILabel
- (void) viewDidLoad {
self.scrollView.backgroundColor = [UIColor whiteColor];
UIFont *font = [UIFont systemFontOfSize:24];
CGSize size = [@"10000:10000" sizeWithFont:font];
_scrollView.contentSize = CGSizeMake(10000 * size.width, 10000 * size.height);
for (int y = 0; y < 10000; y++) {
for (int x = 0; x < 10000; x++) {
NSLog(@"Loading: %d, %d", x, y);
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x * size.width, y * size.height, size.width, size.height)];
label.font = font;
label.textAlignment = UITextAlignmentRight;
label.text = [NSString stringWithFormat:@"%d:%d", x, y];
[_scrollView addSubview:label];
}
}
}
虽然这最终会加载,但加载所有这些标签需要很长时间,并且会消耗大量内存。你想像 TableView 一样延迟加载这个视图。今天晚上我会写一个例子。