iPhone Auto-scroll UITextView, но позволяет руководство, прокручивающее также

По-моему, с вкладами от ТАК сообщество

5
задан Ben Scheirman 6 July 2009 в 20:05
поделиться

3 ответа

Вы можете просто заставить его двигаться относительно того места, где оно находится:

scrollPoint = textView.contentOffset;
scrollPoint.y= scrollPoint.y+10;
[textView setContentOffset:scrollPoint animated:YES];
12
ответ дан 18 December 2019 в 12:00
поделиться

Я думаю, имея два эффективных способа прокрутки контента, вы боретесь с API.

Если я правильно понимаю, в вашей текущей настройке у вас есть кнопка, которая запускает анимацию.

Когда вы прокручиваете таким образом, анимация создается и запускается в другом потоке. Во время анимации меняется слой презентации. Однако фактическое смещение содержимого НЕ установлено до завершения анимации.

Это работает нормально и прозрачно, до вы попытаетесь анимировать то же свойство, пока оно уже анимируется.

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

Однако вы используете удобный метод textView (setContentOffset: animated :). Когда вы делаете это, вы отказываетесь от точного управления анимацией в обмен на меньшее количество строк кода.

Я думаю, что остановить текущую прокрутку может быть сложно или невозможно при использовании API более высокого уровня. Это означает, что для того, чтобы делать то, что вы хотите, вам нужно хотя бы попробовать блок анимации UIView и, скорее всего, фактически создать CAAnimation.

Более простое решение - выбрать один из способов прокрутки вашего textView. HIG предпочитает использовать прямые манипуляции на iPhone.

0
ответ дан 18 December 2019 в 12:00
поделиться

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

Настройка

if (autoscrollTimer == nil) {
  autoscrollTimer = [NSTimer scheduledTimerWithTimeInterval:(35.0/1000.0)
                                                     target:self
                                                   selector:@selector(autoscrollTimerFired:) 
                                                   userInfo:nil 
                                                    repeats:YES];
}

Суть заключается в выключении анимации и перемещении смещения с меньшими приращениями. Кажется, что он работает быстрее и не мешает ручной прокрутке.

- (void)autoscrollTimerFired:(NSTimer*)timer {
   CGPoint scrollPoint = self.textView.contentOffset;
   scrollPoint = CGPointMake(scrollPoint.x, scrollPoint.y + 1);
   [self.textView setContentOffset:scrollPoint animated:NO];
}

Я новичок в разработке Objective-C и iphone, поэтому, если кто-нибудь с большим опытом увидит проблему с этим подходом, я буду признателен за любые отзывы.

3
ответ дан 18 December 2019 в 12:00
поделиться
Другие вопросы по тегам:

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