我在滚动视图中创建了一个标签。 for循环计数超过1000.当时滚动非常慢。如果数据量较少(200,300,...),则其滚动顺畅。我使用以下代码创建标签。
UILabel *modelLabel;
UIButton *modelButton;
for (int i = 0; i < [modelArray count]; i++)
{
modelButton = [UIButton buttonWithType:UIButtonTypeCustom];
modelButton.frame = CGRectMake(0.0, (i * LABEL_HEIGHT), LABEL_WIDTH, LABEL_HEIGHT);
modelButton.tag = i+100;
[modelButton addTarget:nil action:@selector(modelButtonAction:) forControlEvents:UIControlEventTouchUpInside];
[modelScrollView addSubview:modelButton];
modelLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0, (i * LABEL_HEIGHT), LABEL_WIDTH, LABEL_HEIGHT)];
modelLabel.text = [NSString stringWithFormat:@"%@", [[modelArray objectAtIndex:i] valueForKey:@"Model"]];
modelLabel.tag = i+1000;
modelLabel.backgroundColor = [UIColor clearColor];
modelLabel.textColor = [UIColor grayColor];
modelLabel.alpha = 0.5;
modelLabel.textAlignment = UITextAlignmentCenter;
modelLabel.font = EUROSLITE_FONT(14);
[modelScrollView addSubview:modelLabel];
}
[modelScrollView setContentSize:CGSizeMake(280.0, ([modelArray count] * LABEL_HEIGHT))];
如何解决此问题?
提前致谢。
答案 0 :(得分:2)
这种情况发生在您身上,因为您将许多内容加载到内存中
正如上面的评论所说,使用UITableView
很容易实现。
虽然如果你想要更多控制,并且你决定使用滚动视图,你必须实现延迟loding。这样做的目的是在实际需要显示标签时分配和放置标签,而不是在初始化期间。您将能够通过将视图控制器设置为委托并从scrollViewDidScroll:
方法获取contentOffset来了解这一点。此外,在识别出你需要删除子视图以清除内存
你可以看到它的好例子here
答案 1 :(得分:0)
我觉得它是因为ios正试图在内存中创建并保留很多这些视图,而不是在滚动时动态创建它们(我使用那个词吗?)。使用具有重用标识符的UITableView会更快。这将阻止iOs为您创建的每个视图创建新的内存分配。创建一个自定义UTTableViewCell,其中包含您通过重用标识符创建的标签和按钮。
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
您应该能够在Web上找到很多资源,用于创建具有自定义样式的UITableView。如果您需要水平滚动UITableView,请查看EasyTableView。