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