Решение задачи оптимизации


Фишки Apple, решение задачи оптимизации

Вместо того чтобы многократно перерисовывать все представление в процессе рисования формы, мы можем воспользоваться методом setNeedsDisplaylnRect. Этот метод относится к классу NSView и помечает только одну прямоугольную часть области представления как требующую перерисовки. Используя этот метод для пометки той части представления, которая оказывает влияние на текущие операции рисования и требует перерисовки, мы можем существенно повысить эффективность рассматриваемого здесь приложения.


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


Решение задачи оптимизации состоит в том, чтобы отслеживать в переменной экземпляра CGRect весь участок, охваченный движением пальца по экрану. С этой целью установим в методе touchesBegan переменную экземпляра CGRect в состояние, соответствующее одной только точке касания пользователем экрана. Затем воспользуемся в методах touchesMoved и touchesEnded функцией оболочки Core Graphics, позволяющей получить объединение текущего и сохраненного прямоугольников и сохранить полученный в итоге прямоугольник. Им мы воспользуется, чтобы указать ту часть представления, которая требует перерисовки. Такой подход дает нам промежуточный итог для участка, охваченного в настоящий момент проводкой пальцем по экрану.


Итак, рассчитаем текущий прямоугольник в методе drawRect для рисования форм эллипса и прямоугольника. Затем перенесем этот расчет в новый метод, чтобы воспользоваться им во всех трех местах, не повторяя код. С этой целью внесем в заголовочный файл QuartzFunView.h изменения, выделенные ниже полужирным.


Нам нужно также внести ряд изменений в методы touchesEnded withEvent и touches- Moved-.withEvent. В частности, мы должны рассчитать пространство, охватываемое текущей операцией рисования, чтобы указать лишь ту часть текущего представления, которую требуется перерисовать.


  • Дата: 14-01-2015, 20:52

Предыдущие статьи сайта:

Понравилась статья? Ставь лайки, рассказывай друзьям!



Отзывы о статье: Решение задачи оптимизации

Технологии, секреты и фишки Apple: Iphone, iPad, iPod