Какой самый быстрый способ реализовать фон UIView? - PullRequest
0 голосов
/ 23 августа 2009

У меня есть UIView, который я хочу дать градиентному фону, и мне интересно, как реализовать это максимально эффективно.

Я рассматриваю три варианта:

  1. Создайте UIImageView как подпредставление и дайте ему изображение градиента для отображения.

  2. Нарисуйте изображение градиента в drawRect: оригинального UIView.

  3. Нарисуйте градиент в drawRect:, но на этот раз используйте CoreGraphics, чтобы «создать его с нуля».

Какой из этих трех будет самым быстрым / наименее интенсивным по памяти? (Быстрее всего бегать, а не писать.)

Спасибо!

Ответы [ 2 ]

2 голосов
/ 23 августа 2009
  • Создание UIImageView как подпредставления основного представления было бы самым быстрым способом получить то, что вы хотите.
  • Рисование изображения в контексте представления было бы более интенсивным вариантом памяти.
  • Рисование градиента в коде с использованием Core Graphics было бы более эффективным способом.

Что нужно иметь в виду:

Вы практически не контролируете, как часто выполняется drawRect, поэтому вы не хотите делать такие вещи, как выделение памяти в этом методе.

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

1 голос
/ 26 августа 2009

Если удобно визуализировать градиент в UIImage - вы можете рассмотреть что-то вроде.

UIImage * градиентImage = GetGradientImage (); // ваш код self.view.backgroundColor = [UIColor colorWithPatternImage :diImage];

Вы захотите сбалансировать память, необходимую для большого градиента, со временем, которое требуется для его вычисления и многократного рисования.

Это хорошо работает во многих местах, где вы хотите выполнить незначительную настройку фона, или где вы думаете, что вам нужен UIImageView, просто чтобы нарисовать фон на другом виде.

Todd

...