Я много искал для этого ответа, но в конечном итоге должен был придумать один из моих собственных. Вы можете вызвать метод scrollAutomatically с исходным номером строки, как:
[self scrollAutomatically:0];
Так это то, что функция выглядит. Я имел дело с таблицей, которая всегда имела 3000 рядов, и я собирался прокручивать ее донизу.
- (void) scrollAutomatically:(int) i
{
__block int j = i;
[UIView animateWithDuration: 0//Change this to something more for slower scrolls
animations: ^{
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:j inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:NO];
}
completion: ^(BOOL finished){
j = j + 10;//Changing this number affects speed.
if(j<=2999)//here you could provide the index of destination row
[self scrollAutomatically:j];
else
{
//I had some code here that popped up a UIAlertView.
}
}];
}
Теперь, приближаясь к скорости свитка.
ДЛЯ очень быстро Свиток:
Если установить значение, на которое я увеличиваем индекс строки (J) при каждом вызове функции до 10, т.е. если я пишу j = j+10;
тогда мои 3000 строк потребовались около 9 секунд прокручивать. (3000 * означает FPS, который я мог бы собрать). Если я установил его на j = j+20;
, то 3000 рядов заняли около 4,5 секунд. Итак, вы поняли эту идею. Чтобы ускорить его прокрутку, уменьшите значение приращения.
ДЛЯ МЕДЛЕННО, считываемых Свиток:
[UIView animateWithDuration: 1.5//this will directly set your speed. n rows scrolled every 1.5 seconds.
ПРИМЕЧАНИЯ: (. Например customView вы, возможно, добавили к contentView вашего tableViewCell) Если изменить кадры CALayers или Views, то эти анимации начнут беспокоить вас здесь. Для большой продолжительности анимации они будут очень заметны, и вы можете увидеть странную ячейку beahviour.
В таком случае, где бы вы изменить свои кадры и т.д. смотреть на что-то вроде:
[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];
[myView.myCALayer.frame = (CGRect){ { 10, 10 }, { 100, 100 } ];
[CATransaction commit];
Найти вышеуказанное решение here.
Вам также может потребоваться установить словарь действий для слоя, чтобы возвращать значения NULL для всех действий.
NSMutableDictionary *newActions = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[NSNull null], @"sublayers", nil];
superlayer.actions = newActions;
Это, кажется, слишком поздно, но для людей, сталкивающихся с одной и той же проблемой, я надеюсь, что этот ответ будет полезен. Также, пожалуйста, не стесняйтесь руководить мной, если я сделал несколько очевидных (или не столько) ошибок.
Edit: К сожалению, я вижу точную вещь выше мой ответ :( В любом случае, это немного более подробные и я буду только начинающий :)
ничего по этому поводу? –