Xcode Scrollview很慢

时间:2013-01-28 14:27:58

标签: iphone ios uiscrollview

我在滚动视图中创建了一个标签。 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))];

如何解决此问题?

提前致谢。

2 个答案:

答案 0 :(得分:2)

这种情况发生在您身上,因为您将许多内容加载到内存中

正如上面的评论所说,使用UITableView很容易实现。

虽然如果你想要更多控制,并且你决定使用滚动视图,你必须实现延迟loding。这样做的目的是在实际需要显示标签时分配和放置标签,而不是在初始化期间。您将能够通过将视图控制器设置为委托并从scrollViewDidScroll:方法获取contentOffset来了解这一点。此外,在识别出你需要删除子视图以清除内存

之后

你可以看到它的好例子here

答案 1 :(得分:0)

我觉得它是因为ios正试图在内存中创建并保留很多这些视图,而不是在滚动时动态创建它们(我使用那个词吗?)。使用具有重用标识符的UITableView会更快。这将阻止iOs为您创建的每个视图创建新的内存分配。创建一个自定义UTTableViewCell,其中包含您通过重用标识符创建的标签和按钮。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 

您应该能够在Web上找到很多资源,用于创建具有自定义样式的UITableView。如果您需要水平滚动UITableView,请查看EasyTableView