104 (Проектирование приложений с прокруткой) - это правильный разговор.
ьзуя 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 и его ячейки достигают этого за кулисами, было бы полезно.