我在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];
}
有没有办法在线程中调用它。
答案 0 :(得分:2)
不要这样做。使用基于单元格的scrollview子类(表视图或集合视图)或滚动自己的子类。您的内容是屏幕的宽度,因此绝对不需要一次加载1000个屏幕的内容。
使用基于单元格的视图,您只需创建显示屏幕所需的数量,并在屏幕上显示新内容时对这些视图进行回收和重新配置。
答案 1 :(得分:1)
我在滚动视图中创建了1000个视图。
不要那样做。用户不可能一次使用 1000个视图,因此不要一次创建所有视图。 WWDC 2010,2011和2012中有一些很好的视频,包括在滚动视图中平铺内容 - 看看那些有一些好主意的内容。
滚动视图委托在滚动视图的内容移动时获取消息,您可以使用这些消息及时添加内容,以便滚动到屏幕上并在滚动后将其删除。这基本上就是UITableView和UICollectionView所做的,你可以像jrturton建议的那样使用它们中的任何一种,或者你可以自己遵循相同的模式。
这不仅可以加快滚动视图的创建速度,而且还可以使滚动更平滑,并且消耗的内存比您需要的内存少得多。