Любой возможный способ CoreGraphics не отставать при вызове drawrect от перемещенных касаний? - PullRequest
0 голосов
/ 02 октября 2011

Я вызываю setNeedsDisplay от перемещенных касаний (и также пытался вызывать не перемещенные касания, а вместо этого из таймера 0,05), а метод drawrect всегда отстает. В любом случае, чтобы это изменить? Я много рисую в рисовании, но понятия не имею, как решить проблему с задержкой. Даже когда таймер был вызван с интервалом 1,0, он все еще отставал, когда таймер вызывал селектор. Кроме того, у меня нет утечек (я проверил, используя функцию анализа Xcode). Пожалуйста, помогите !!

РЕДАКТИРОВАТЬ: я вызываю setNeedsDisplay, а не drawRect из моего таймера / метода

РЕДАКТИРОВАТЬ: Кажется, что где бы графическая карта ни делала что-то с большим количеством рисования, она всегда отстает. Я уверен, что у меня нет утечек памяти, и я даже создал другое приложение для рисования, и оно отстает (как это исправить? Пожалуйста, помогите мне)

Ответы [ 4 ]

4 голосов
/ 03 октября 2011

Слегка отредактированная стенограмма комментариев к одному из других ответов:

Я рисую цвет на основе палитры оттенков (в прямоугольнике отрисовки рисуется линия для каждого значения оттенка)

… Вы рисуете 360 прямоугольников?

Да, я….

Я рисую изображения 360 прямоугольников разных цветов в изображение одного UIImageView,чем я освобождаю прямоугольники.(Я использую цикл for для выделения / освобождения прямоугольника)

Итак, вы делаете это 360 раз:

  1. Создайте изображение.
  2. Нарисуйте прямоугольник на этом изображении.(Или нет, если шаг 1 загружает изображение из файла.)
  3. Нарисуйте это изображение в другое изображение.
  4. Отпустите изображение.

И тогда выпередать изображение, в которое вы нарисовали все меньшие изображения, в UIImageView для фактического отображения?

Похоже, вы пытаетесь кэшировать это в изображении, что должно помочь после первого раза, если вы это сделаетеверно, но это не должно быть медленным во-первых.

У вас уже есть пользовательский вид.Отбросьте представление изображения и вырежьте весь этот код рисования прямоугольника (или рисунка).Если у вас есть файлы изображений с отдельными цветными прямоугольниками, удалите их.

В ваших видах drawRect:, создайте градиент и нарисуйте этот .Ваша drawRect: будет длиной в три строки и должна быть намного, намного, намного быстрее.

2 голосов
/ 02 октября 2011

Я звоню по телефону из-за перемещенных прикосновений

не делайте этого.

(и также пытались не звонитьот прикосновения перемещены, но вместо таймера 0,05)

не делайте этого.

и метод drawrect всегда медленный.В любом случае, чтобы это изменить?Я много рисую в рисовании, но понятия не имею, как решить проблему с задержкой.Даже когда таймер был вызван с интервалом 1,0, он все еще отставал, когда таймер вызывал селектор.Кроме того, у меня нет утечек (я проверил, используя функцию анализа Xcode).Пожалуйста, помогите !!

Да!

2 голосов
/ 02 октября 2011

НИКОГДА не звоните drawRect явно. Вместо этого используйте setNeedsDisplay, и рисование будет выполнено, когда система будет готова к этому.

EDIT: Исходя из того, что ты уже этим занимаешься. Ваша проблема в том, что ваш drawRect слишком медленный. Что ты пытаешься нарисовать?

0 голосов
/ 02 октября 2011

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

Вы также можете запустить фоновый поток для подготовки кадров в буфере и использовать его для рисования на экране. Это зависит от того, какой рисунок вы делаете. Вот сообщение в блоге Я нашел по этой теме.

Или вы можете использовать OpenGL ES для рисования.

...