UIScrollView - как избавиться от задержки перед прокруткой? - PullRequest
2 голосов
/ 10 декабря 2011

Я использую UIScrollView для отображения пользовательского UIView. Когда пользователь drags проводит пальцем по UIScrollView, происходит заметная задержка, прежде чем дисплей начнет обновляться. Если пользователь держит touching на экране, UIScrollView становится очень отзывчивым через короткое время. Последующие попытки scroll приводят к той же начальной задержке, за которой следует высокая скорость отклика. Эта задержка серьезно влияет на удобство использования представления, и я хотел бы от него избавиться.

В тестовом проекте, который я написал, чтобы попытаться докопаться до сути этой проблемы, мне удалось лишь частично воспроизвести поведение. Первый раз, когда пользователь scrolls точно такой же, однако любые последующие попытки scroll сразу реагируют.

Я пробовал установить delaysContentTouches = NO и подклассы UIScrollView, чтобы touchesShouldBegin returns NO, как это было предложено в нескольких местах в Интернете, но ни одна из них не сработала.

Я использую MonoTouch на iOS 4.3, но Objective-C ответы в порядке. Я бы опубликовал код, чтобы проиллюстрировать проблему, но так как я не смог сузить проблему, это было бы более 1000 строк. Надеюсь, этого достаточно, чтобы найти решение.

Кто-нибудь знает, что может быть причиной этой задержки, и как я могу от нее избавиться?

Ответы [ 2 ]

2 голосов
/ 11 декабря 2011

Я подозреваю, что происходит что-то вроде взаимодействия в содержимом вашего представления прокрутки.

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

Каковы подпредставления представления UIScroll?

Какэксперимент установил все подпредставления UIScrollView, чтобы иметь userInteractionEnabled = NO, это будет не то, что вы хотите, а просто тест.Это должно прокручиваться нормально после этого, иначе я ошибаюсь.

2 голосов
/ 11 декабря 2011

Некоторые общие предложения по улучшению производительности прокрутки.

Пусть ваши прокрутки растеризуют за пределами экрана:

myView.layer.shouldRasterize = YES;

Установите это свойство для каждого вложенного представления в просмотре прокрутки - не устанавливайте его для дочерних элементов этих вложенных представлений, или вы просто поелитаким образом увеличивать объем памяти.

Если ваши прокручиваемые виды не требуют компоновки, убедитесь, что вы выключили это смешение:

myView.opaque = YES;

Проверьте с помощью симулятора, используя эти две функции, которые появляются наМеню отладки симулятора iOS:

  • Цвет за пределами экрана
  • Цветные смешанные слои

Если это не решит вашу проблему, и выреализовали UIScrollViewDelegate, дважды проверьте, чтобы убедиться, что в этих методах вы не занимаете много времени - например, основываясь на вашем описании, вы можете что-то делать в scrollViewDidScroll , scrollViewWillBeginDragging или scrollViewWillBeginZooming и, если да, оптимизируйте это так, чтобы это произошло еще до того, как начнется прокрутка.Кроме того, убедитесь, что вы ничего не делаете в касаниях Bean .

...