Core Graphics- drawRect: недостаточно часто звонят - PullRequest
2 голосов
/ 09 августа 2011

В моем приложении у меня есть UIViewController с вложенным UIView (и несколькими другими элементами) внутри него. Внутри UIView, называемого DrawView, в моем методе drawRect: я рисую элемент типа сетки таблицы и строю на нем массив CGPoints. Когда пользователь нажимает на экран, он вызывает touchesBegan:withEvent: и проверяет, чтобы найти ближайшую точку сетки на ощупь, добавляет точку в массив, из которой метод drawRect: рисует точки, и вызывает [self setNeedsDisplay]. Когда пользователь перемещает палец по экрану, он проверяет, изменилась ли точка с последнего местоположения, и обновляет точку и при необходимости вызывает [self setNeedsDisplay].

Это прекрасно работает в симуляторе. Однако при запуске на реальном iPhone он работает очень медленно, когда вы двигаете пальцем, он отстает в рисовании точки. Я читал, что выполнение вычислений для размещения точек в другом потоке может улучшить производительность. У кого-нибудь есть опыт с этим, который знает это наверняка? Любые другие предложения по уменьшению отставания?

1 Ответ

4 голосов
/ 09 августа 2011

Любые другие предложения по сокращению отставания?

Да.Не используйте -drawRect:.Это длинная и сложная причина, почему, но в основном, когда UIKit видит, что вы реализовали -drawRect: в своем подклассе UIView, рендеринг проходит по очень медленному программному пути рендеринга.Когда вы рисуете с CALayer объектами и составными видами, вы можете получить графику с аппаратным ускорением, которая может повысить производительность вашего приложения.

...