在滚动视图中创建1000个视图需要时间

时间:2013-07-01 06:01:57

标签: iphone uiscrollview

我在scrollview中创建了1000个视图。这需要更多时间来加载视图。

wordsDetails *wordsObj;
for(int i = 0; i<arrayOfWords.count;i++) {
    UIView *viewForDisplay = [[UIView alloc]initWithFrame:CGRectMake(320*i, 0, 320, 440)];
    UILabel *wordLabel = [[UILabel alloc]initWithFrame:CGRectMake(30, 40, 240, 40)];
    wordLabel.backgroundColor = [UIColor clearColor];
    wordLabel.textColor = [UIColor yellowColor];
    wordLabel.font = [UIFont fontWithName:@"Didot" size:24.0];
    wordsObj = [arrayOfWords objectAtIndex:i];
    wordLabel.text = wordsObj.word;//[NSString stringWithFormat:@"sdssds - %i",i];
    [viewForDisplay addSubview:wordLabel];

    UITextView *textView = [[UITextView alloc]initWithFrame:CGRectMake(30, 100, 240, 100)];
    textView.text  = wordsObj.meaning;
    textView.editable = NO;
    textView.textColor = [UIColor whiteColor];
    textView.font = [UIFont fontWithName:@"Didot" size:20.0];
    textView.backgroundColor = [UIColor clearColor];
    [viewForDisplay addSubview:textView];
    [fScrollView addSubview:viewForDisplay];
}

有没有办法在线程中调用它。

2 个答案:

答案 0 :(得分:2)

不要这样做。使用基于单元格的scrollview子类(表视图或集合视图)或滚动自己的子类。您的内容是屏幕的宽度,因此绝对不需要一次加载1000个屏幕的内容。

使用基于单元格的视图,您只需创建显示屏幕所需的数量,并在屏幕上显示新内容时对这些视图进行回收和重新配置。

答案 1 :(得分:1)

  

我在滚动视图中创建了1000个视图。

不要那样做。用户不可能一次使用 1000个视图,因此不要一次创建所有视图。 WWDC 2010,2011和2012中有一些很好的视频,包括在滚动视图中平铺内容 - 看看那些有一些好主意的内容。

滚动视图委托在滚动视图的内容移动时获取消息,您可以使用这些消息及时添加内容,以便滚动到屏幕上并在滚动后将其删除。这基本上就是UITableView和UICollectionView所做的,你可以像jrturton建议的那样使用它们中的任何一种,或者你可以自己遵循相同的模式。

这不仅可以加快滚动视图的创建速度,而且还可以使滚动更平滑,并且消耗的内存比您需要的内存少得多。