Я лично предпочитаю SimpleTest. Существует исполнитель тестов командной строки и веб-исполнитель тестов, и существует даже плагин Eclipse , чтобы позволить Вам выполнить модульные тесты от самого IDE. Я нашел, что Зенд к соединению PHPUnit намного тяжелее получил работу, особенно с отладчиком.
способ, которым мы используем внутренний SimpleTest, с непрерывная интеграция сценарий, который мы записали сами. Каждый раз, когда мы регистрируемся в функции к SVN, мы включаем модульные тесты. Каждый час или так, сценарий CI выполняет и называет Сценарий PHP командной строки, который выполняет все наши модульные тесты. Если какое-либо повреждение, я получаю электронное письмо. Это был отличный способ уменьшить ошибки в наших системах.
Однако можно столь же легко использовать что-то как Phing для запущения тестов автоматически, или на задании крона или с рычагом регистрации SVN.
На самом деле, если Вы хотите связаться со мной непосредственно для дальнейшей справки, можно добраться до меня через мою информацию о профиле о ТАК. Я хотел бы выручить Вас.
Хотя невозможно иметь действительно бесконечный UIScrollView, есть несколько простых приемов, которые можно использовать для имитации этого поведения.
contentSize
: есть некоторые исправления -size представление, обрабатываемое вашим представлением прокрутки, и при запуске или создании экземпляра установите смещение содержимого так, чтобы вы видели середину обработанного представления. Затем просто наблюдайте за смещением содержимого (используя KVO или какой-либо другой метод), и если вы приближаетесь к какому-либо краю, обновите содержимое представления новым набором содержимого (смещение соответствующим образом) и сбросьте contentOffset
представления прокрутки. свойство снова быть посередине. Возможно, установка contentSize
на какое-то гигантское значение, а затем перемещение ограниченного числа базовых представлений вокруг для отслеживания положения представления, как в мозаике образец сделает свое дело.
Чтобы уменьшить возможность в конечном итоге достичь края и резко изменить центр обзора (что отменяет любую прокрутку, находящуюся в данный момент в движении), время от времени вид может быть повторно центрирован, когда он неподвижен.
Во всяком случае, это то, что я собираюсь попробовать.
Я только что закончил реализацию бесконечной прокрутки для меня. В моей реализации у меня есть UITableViewCell с scrollView и Navigationbuttons. ScrollView содержит x представлений одинаковой ширины. представления выровнены по горизонтали, а разбиение по страницам включено.
scrollView.clipsToBounds = YES;
scrollView.scrollEnabled = YES;
scrollView.pagingEnabled = YES;
scrollView.showsHorizontalScrollIndicator = NO;
Моя логика кода выглядит следующим образом:
Затем я вызываю функцию, которая вычисляет в цикле позиции для каждого представления (каждого когда вы обнаружите прокрутку, эту функцию тоже нужно будет вызвать). Он всегда берет первый элемент массива и устанавливает рамку на (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 = центр;
}
Затем (все еще в процессе инициализации) я добавляю наблюдателя
[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
И в dealloc или viewDidUnload (зависит от того, как вы это реализуете) не забудьте удалить наблюдателя.
[scrollView removeObserver: self forKeyPath: @ "contentOffset"];
Надеюсь, это поможет, вы можете заметить некоторые накладные расходы, но в моей реализации я также поддерживаю прокрутку 5 страниц (ну ... неограниченно) за один раз, а также автоматическую прокрутку и т. Д.чтобы вы могли увидеть что-то, что можно выбросить.