2013-06-15 1 views
0

У меня есть большой вид прокрутки. Я просто хочу прокрутить список прокрутки с помощью фиксированных шагов при каждом нажатии кнопки. Однако, когда я пишу следующий код, прокрутка прокрутки очень неровная. Может кто-нибудь объяснить, почему?UIScrollView Jerky Scrolling

CGPoint lstructCurrentPoint = self.objScrollView.contentOffset; 
lstructCurrentPoint.x += 400; 

     [UIView animateWithDuration:1.0f 
           delay:0.0f 
          options:UIViewAnimationOptionCurveLinear 
         animations:^{ 
          [self.objScrollView scrollRectToVisible:CGRectMake(lstructCurrentPoint.x, 
                       lstructCurrentPoint.y, 
                       self.objScrollView.bounds.size.width, 
                       self.objScrollView.bounds.size.height) 
                  animated:NO]; 
         } completion:^(BOOL finished) 
         { 
         }]; 

Я не использую анимированный: Да arguement, потому что мне нужно пользовательские скорости прокрутки между различными contentOffsets.

ответ

1

при обновлении scroolview содержимого кадра при прокрутке с анимацией, как вы пытаетесь обновить что-то в прошлом, что уже изменилось ... (вероятно, не самое лучшее объяснение: D)

попробовать с этим в вашей анимации вариант:

options:UIViewAnimationOptionCurveLinear|UIViewAnimationOptionBeginFromCurrentState 
+0

Я пробовал это. Но, похоже, не улучшает рывок. – praveen

+0

Не могли бы вы лучше объяснить, какое поведение вы получаете? – Manu

+0

В этом месте смотрите проект прокрутки ScrollView Programatic Scroll. В проекте вы можете увидеть очень плавную прокрутку со значением ползунка, близким к 60. Но что-то вроде 200+ делает прокрутку прокрутки. (dropbox.com/sh/rdldvliuio6ebrg/OTjUJFj_rl) ​​ – praveen

0

Почему вы просто не попробовать использовать

[self.objScrollView scrollRectToVisible:CGRectMake(lstructCurrentPoint.x, lstructCurrentPoint.y,self.objScrollView.bounds.size.width,self.objScrollView.bounds.size.height) animated:YES]; 

вместо того, чтобы использовать это в UIView анимации функция.

+0

Я не делаю анимированных: Да, потому что у меня есть прокрутка, которую я хочу прокрутить до разных contentOffsets с разной скоростью. По умолчанию прокрутка в анимированном режиме может выполнять только две скорости. Я хочу указать разные скорости для перемещения к различным смещениям контента. – praveen

0

Попробуйте использовать

[self.objScrollView setContentOffset: CGPointMame(lstructCurrentPoint.x, lstructCurrentPoint.y) animated: YES]; 

вместо scrollRectToVisible.

+0

Я не хочу использовать анимированные: Да. Именно поэтому я использую метод анимации UiView. – praveen

0

scrollRectToVisible анимированная анимация сама по себе.

С помощью вашего текущего кода вы пытаетесь анимировать анимацию.

Следовательно, это отрывисто.

Просто используйте для прокрутки прямоугольника видимые:

[self.objScrollView scrollRectToVisible:CGRectMake(lstructCurrentPoint.x,lstructCurrentPoint.y,self.objScrollView.bounds.size.width,self.objScrollView.bounds.size.height) animated:YES]; 
+0

У меня есть анимированный аргумент, равный NO. Поэтому я не думаю, что это анимация в анимации.Кроме того, мне нужно делать пользовательские времена для анимаций, и поэтому я не хочу делать анимированный аргумент «да», потому что он может прокручивать материал всего за две скорости. – praveen

+0

В этом случае я попробую: выясните, что contentOffset для того, чтобы rect был видимым, setContentOffset как источник прямоугольника (или где бы вы ни захотели, чтобы начало координат располагалось в видимом прямоугольнике scrollView) в блоке animationWithDuration. –

0

Никто не может правильно ответить на ваш вопрос, не зная, какое содержание вы имеете в Scrollview.

Однако вы можете узнать, что вызывает это самостоятельно.

Профиль приложения на вашем устройстве. Это откроет инструменты. Выберите инструмент Core Animation.

Когда приложение работает, прокрутите представление так, чтобы инструменты захватывали данные.

Теперь раздел Time Profiler расскажет вам, что именно занимает много времени. Исправьте это, и у вас будет гладкая прокрутка.

+0

В этом месте смотрите проект прокрутки ScrollView Programatic Scroll. Я уже пробовал инструменты и профайлер времени, но я, кажется, не понимаю, что вызывает это. Фактически в проекте вы можете видеть очень плавную прокрутку со значением ползунка, близким к 60. Но что-то вроде 200+ делает прокрутку прокрутки. Ссылка https://www.dropbox.com/sh/rdldvliuio6ebrg/OTjUJFj_rl – praveen

+0

Хм ... трудно сказать, поскольку у меня нет iPad для тестирования. Глядя на профайлера времени, хотя он помещает строку '[UIImage imageWithContentsOfFilePath: path]'. Можете ли вы кэшировать это изображение, а не называть его каждый раз? Кроме того, изображение имеет правильный размер для отображения или оно изменяется? – Fogmeister

+0

1. Вы можете попробовать это на симуляторе. Это то же поведение на устройстве или симуляторе. 2. Изображение не изменяется. 3. [UIImage imageWithContentsOfFilePath: path] эта функция не влияет ни на что, как я пробовал делать [UiImage imageNamed] вещь тоже. 4. Изображение не изменяется. – praveen