UIScrollView. Какие-либо мысли о реализации “бесконечной” прокрутки/масштабирования?

Я лично предпочитаю SimpleTest. Существует исполнитель тестов командной строки и веб-исполнитель тестов, и существует даже плагин Eclipse , чтобы позволить Вам выполнить модульные тесты от самого IDE. Я нашел, что Зенд к соединению PHPUnit намного тяжелее получил работу, особенно с отладчиком.

способ, которым мы используем внутренний SimpleTest, с непрерывная интеграция сценарий, который мы записали сами. Каждый раз, когда мы регистрируемся в функции к SVN, мы включаем модульные тесты. Каждый час или так, сценарий CI выполняет и называет Сценарий PHP командной строки, который выполняет все наши модульные тесты. Если какое-либо повреждение, я получаю электронное письмо. Это был отличный способ уменьшить ошибки в наших системах.

Однако можно столь же легко использовать что-то как Phing для запущения тестов автоматически, или на задании крона или с рычагом регистрации SVN.

На самом деле, если Вы хотите связаться со мной непосредственно для дальнейшей справки, можно добраться до меня через мою информацию о профиле о ТАК. Я хотел бы выручить Вас.

20
задан dugla 29 September 2009 в 17:32
поделиться

3 ответа

Хотя невозможно иметь действительно бесконечный UIScrollView, есть несколько простых приемов, которые можно использовать для имитации этого поведения.

  1. Обработка фиксированного contentSize : есть некоторые исправления -size представление, обрабатываемое вашим представлением прокрутки, и при запуске или создании экземпляра установите смещение содержимого так, чтобы вы видели середину обработанного представления. Затем просто наблюдайте за смещением содержимого (используя KVO или какой-либо другой метод), и если вы приближаетесь к какому-либо краю, обновите содержимое представления новым набором содержимого (смещение соответствующим образом) и сбросьте contentOffset представления прокрутки. свойство снова быть посередине.
  2. Обработка масштабирования: сделайте что-то подобное, только на этот раз посмотрите коэффициент масштабирования в режиме прокрутки. Всякий раз, когда дело доходит до определенной точки, произведите манипуляции с любыми данными, которые вы ' повторное представление так, чтобы оно выглядело увеличенным, затем сбросьте коэффициент масштабирования на 1,0. Например, если вы прокручиваете изображение, и оно увеличивается, чтобы оно стало вдвое больше, программно примените какое-то преобразование, чтобы сделать изображение в два раза больше, а затем сбросьте коэффициент масштабирования представления прокрутки на 1,0. Изображение по-прежнему будет увеличиваться, но в режиме прокрутки можно будет продолжать увеличивать масштаб при необходимости. (Google Maps делает еще один шаг вперед, когда пользователь лениво загружает более подробные представления по мере увеличения масштаба изображения - вы можете или не можете выбрать, реализовать это.)
10
ответ дан 30 November 2019 в 00:40
поделиться

Возможно, установка contentSize на какое-то гигантское значение, а затем перемещение ограниченного числа базовых представлений вокруг для отслеживания положения представления, как в мозаике образец сделает свое дело.

Чтобы уменьшить возможность в конечном итоге достичь края и резко изменить центр обзора (что отменяет любую прокрутку, находящуюся в данный момент в движении), время от времени вид может быть повторно центрирован, когда он неподвижен.

Во всяком случае, это то, что я собираюсь попробовать.

0
ответ дан 30 November 2019 в 00:40
поделиться

Я только что закончил реализацию бесконечной прокрутки для меня. В моей реализации у меня есть UITableViewCell с scrollView и Navigationbuttons. ScrollView содержит x представлений одинаковой ширины. представления выровнены по горизонтали, а разбиение по страницам включено.

scrollView.clipsToBounds = YES;
scrollView.scrollEnabled = YES;
scrollView.pagingEnabled = YES;
scrollView.showsHorizontalScrollIndicator = NO;

Моя логика кода выглядит следующим образом:

  1. В моей функции инициализации я
    • создают все представления (для scrollview) и
    • помещают их в массив и
    • добавляют их в scrollView
  2. Затем я вызываю функцию, которая вычисляет в цикле позиции для каждого представления (каждого когда вы обнаружите прокрутку, эту функцию тоже нужно будет вызвать). Он всегда берет первый элемент массива и устанавливает рамку на (0,0, ..., ...), второй - на (i * width, 0, ...., ....) и так на. Вызываемая функция выглядит так:

     - (void) updateOffsetsOfViews {
    int xpos = 0;
    for (int i = 0; i <[количество просмотров]; i ++) {
    UIImageView * _view = [просмотры objectAtIndex: i];
    CGRect aFrame = _view.frame;
    aFrame.origin.x = xpos;
    aFrame.origin.y = 0,0;
     _Посмотреть.frame = aFrame;
    xpos + = viewWidth;
     }
    центр с плавающей точкой = 0;
    if (fmod ([количество просмотров], 2) == 1) {
    center = viewWidth * ([количество просмотров] -1) / 2;
     }еще {
    center = viewWidth * [количество просмотров] / 2;
     }
     [scrollView setContentOffset: CGPointMake (центр, 0)];
    lastOffset = центр;
    }
    
  3. Затем (все еще в процессе инициализации) я добавляю наблюдателя

      [scrollView addObserver: self forKeyPath: параметры @ "contentOffset": 0 context: nil];
    

    поэтому каждый раз, когда что-то изменяется в scrollView, я вызываю функцию (ObservValueForKeyPath), которая выглядит следующим образом:

     - (void) compareValueForKeyPath: (NSString *) keyPath ofObject: (id) object change: (NSDictionary *) изменить контекст: (void *) context
    {
    UIImageView * _viewFirst = (UIImageView *) [просмотры objectAtIndex: 0];
    if (fmod ([scrollView contentOffset] .x, viewWidth) == 0.0) {
    if ([scrollView contentOffset] .x> lastOffset) {
     [просмотров removeObjectAtIndex: 0];
     [просмотры addObject: _viewFirst];
     [самообновлениеOffsetsOfViews];
     } else if ([scrollView contentOffset] .x 
  4. И в dealloc или viewDidUnload (зависит от того, как вы это реализуете) не забудьте удалить наблюдателя.

      [scrollView removeObserver: self forKeyPath: @ "contentOffset"];
    

Надеюсь, это поможет, вы можете заметить некоторые накладные расходы, но в моей реализации я также поддерживаю прокрутку 5 страниц (ну ... неограниченно) за один раз, а также автоматическую прокрутку и т. Д.чтобы вы могли увидеть что-то, что можно выбросить.

13
ответ дан 30 November 2019 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: