При использовании UITableView мы можем повторно использовать его ячейки с помощью методов [[ UITableViewCell alloc] initWithStyle: reuseIdentifier:]
и [uiTableViewInstance dequeueReusableCellWithIdentifier:]
. Это помогает держать память под контролем для огромных таблиц, поскольку в данный момент в представлении есть только несколько ячеек.
Я хочу создать UIScrollView
, который имеет много подпрограмм. Вставка всех подъявок занимает много памяти и начальное время, которое я хочу избежать. Поддерживает ли Apple API способы повторного использования таких пользовательских компонентов (UIView или подкласс этого объекта здесь), так же как представления ячеек с использованием идентификатора?
Я создам один, если API отсутствует, но есть некоторые сомнения относительно этого. Например, для каждого нового subview, я устанавливаю его положение кадра, после представлений 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];
}
Edit:
Некоторое понимание того, как tableview и его ячейки достигают этого за кулисами, было бы полезно.