У меня есть UIView, в который я перемещаюсь, используя UIScrollView. Код выглядит так:
[view setObject:object]; // updates a bunch of labels, images, etc
[scrollView addSubview:view];
[scrollView setContentOffset:CGPointMake(320,0) animated:YES];
Проблема в том, что scrollView, по-видимому, не ожидает полной загрузки представления, прежде чем анимировать его contentOffset, и поэтому анимация довольно резкая (почти отсутствует на первом слайде и на старых устройствах). Как ни странно, переключение 3-й строки на это исправляет это:
[UIView animateWithDuration:0.3 animations:^{
[scrollView setContentOffset:CGPointMake(320,0) animated:NO];
}];
Никаких задержек, идеально плавное скольжение. Однако это не вызывает никаких вызовов UIScrollViewDelegate, от которых я также зависел (но которые не отвечают за задержку).
Любая идея о том, как я мог сказать UIScrollView ждать полной загрузки представления, прежде чем анимировать его contentOffset? Или, может быть, мне чего-то не хватает?
РЕДАКТИРОВАТЬ : прежде чем кто-либо еще предложит это: да, я попробовал:
[self performSelector:@selector(slideIn) withObject:nil afterDelay:1];
просто чтобы посмотреть, исправит ли это. И да, это исправляет отставание, но это не фактическое решение. performSelector:afterDelay:
никогда не является решением, это только поверхностное исправление. Кроме того, вы заставляете пользователя каждый раз ждать дополнительные секунды (поскольку фактическая задержка может быть намного меньше, чем 1 секунда, в зависимости от модели устройства).