DrawRect UIView вызывается несколько раз после периода бездействия - PullRequest
2 голосов
/ 20 марта 2012

В моем приложении для iPad используется UIScrollView, в котором я реализовал метод drawRect :.Этот метод обновляет только ту часть представления, которую необходимо перерисовать.Содержимое, которое должно быть нарисовано, изменяется на некоторый жест пользователем (как в приложении для рисования).Во время жеста setNeedsDisplayInRect: метод представления прокрутки вызывается с прямоугольником, который необходимо перерисовать.

Обычно все работает нормально и, как и ожидалось.Однако, если пользователь запускает новый жест после периода бездействия (~ 10 секунд), метод drawRect: вызывается 3 раза с параметром rect размером с экран (текущая видимая часть scrollview).).Это приводит к заметной потере частоты кадров в распознавателе жестов.

Я не знаю, почему метод drawRect: вызывается 3 раза с полноэкранным прямоугольником.Я попытался обнаружить эти «ненужные» вызовы drawRect и просто ничего не делать .Однако это приводит к очищенному экрану (изменение clearsContextBeforeDrawing не помогло).Я также попытался изменить свойство contentMode в scrollview.Это никак не повлияло на поведение.

Обратите внимание, что метод scrollViewDidScroll: никогда не вызывается во время жеста.

Я уже кеширую то, что должно быть нарисовано в отдельном CGImage.Однако простое копирование этого изображения 3 раза уже приводит к значительному снижению производительности.

Есть ли способ предотвратить вызов метода drawRect: 3 раза?В идеале его следует вызывать только с маленьким прямоугольником для обновления, но на этом этапе я уже был бы благодарен, если бы он вызывался только один раз с полным прямоугольником.

...