Как повторно использовать / переработать пользовательский элемент, такой как uitableviewcell?

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

21
задан Stanislav Pankevich 5 April 2013 в 04:34
поделиться