【发布时间】:2011-06-22 07:33:06
【问题描述】:
使用 UITableView 时,我们可以使用 [[ UITableViewCell alloc] initWithStyle: reuseIdentifier:] 和 [uiTableViewInstance dequeueReusableCellWithIdentifier:] 方法重用其单元格。这有助于检查大型表格的内存,因为在给定的时刻视图中只有几个单元格。
我想创建一个有很多子视图的UIScrollView。插入所有子视图会占用我想要避免的大量内存和初始时间。 Apple API 是否提供了重用此类自定义组件(此处为 UIView 或其子类)的方法,就像使用标识符的单元格视图一样?
如果没有 API,我会创建一个,但对此有一些疑问。例如,对于每个新的子视图,我都在 previos 视图之后设置它的框架位置。回收时我应该如何更新每个子视图的框架?我应该在每个子视图被回收时删除并重新加载它的内容吗?我应该在另一个线程中进行所有这些计算以避免生涩的滚动吗?总而言之,我希望在 UITableView 中获得流畅的滚动体验,并包含所有重用内容。
这是我目前编写的代码示例:
int numberOfPages = 0;
int pageWidth = 100;
int pageHeight = 100
UIScrollView *myScrollView = //allocate and initialize a scrollview
//set its size to 100 by 100 (width equal to pageWidth)
//set paging enabled for myScrollView
通过多次调用的方法向其添加子视图
- (void) appendSubViewToScrollView {
UIView *view = //allocate and initialize a view and dump data in it.
CGRect rect = view.frame;
rect.size.height = pageHeight;
rect.size.width = pageWidth;
rect.origin = CGPointMake(pageHeight * numberOfPages, 0);
view.frame = rect;
[myScrollView addSubview:view];
numberOfPages++;
[scrollView setContentSize:CGSizeMake(pageHeight * numberOfPages, pageWidth)];
[view release];
}
编辑:
深入了解 tableview 及其单元格如何在幕后实现这一点会很有用。
【问题讨论】:
标签: iphone objective-c uiscrollview reusability