Каков самый быстрый способ реализовать фон UIView?

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

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

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

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

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

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

Спасибо!


person Pieter Jongsma    schedule 23.08.2009    source источник


Ответы (2)


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

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

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

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

person Jasarien    schedule 23.08.2009
comment
Создание изображения с последующим его рисованием внутри drawRect: потребует больше памяти, но быстрее, чем рисование градиента каждый раз. Если приложение привязано к ЦП, используйте кэшированное изображение; если приложение привязано к памяти, нарисуйте градиент напрямую. - person rpetrich; 24.08.2009

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

UIImage * gradientImage = GetGradientImage (); // ваш код self.view.backgroundColor = [UIColor colorWithPatternImage: gradientImage];

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

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

Тодд

person Todd    schedule 25.08.2009