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

Ответы на вопрос(1)

Ваш ответ на вопрос