2009-11-30 2 views
3

Я новичок в разработке iPhone и в настоящее время играю с воссозданием графического инструмента, разработанного для Silverlight.Можете ли вы изменить градиенты с помощью кварца в iPhone?

В настоящее время я использую градиент, чтобы «заполнить» прямоугольник, представляющий панель внутри диаграммы. Можно ли анимировать этот градиент, чтобы он менял цвет, когда пользователь касается панели в диаграмме.

Я просмотрел основные руководства по анимации, предоставленные Apple, но не вижу свойства, которое нацелено на градиенты. Я полагаю, что я мог бы использовать переход к исчезновению между двумя прямоугольниками, один из которых имеет мой начальный градиент, а второй с «тронутой» версией, но это означало бы, очевидно, рисование нескольких объектов прямоугольника для каждого бара, и я предполагаю дополнительные служебные накладные расходы.

Любые идеи?

ответ

11

Да, вы можете анимированные градиенты с использованием Core Animation.

Класс CAGradientLayer, выпущенный в версии 3.0, имеет хороший API для визуализации градиентов в слой и анимирования изменений цвета и цвета.

I did a post on this class некоторое время назад, а также пример кода, который связан в нижней части.

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

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

+0

Thanks Joe - теперь он работает точно так, как планировалось. Был немного тупик, поскольку я не знал, что вам нужно установить рамку слоя. Провел много времени, глядя на пустой вид, пока не понял, что мой градиентный слой имеет размеры 0,0,0,0 ... У меня есть вопрос к вам, если у вас есть время - можно ли рисовать дорожки внутри каждого слоя? Я пытаюсь добавить удар вокруг каждого бара. Все, что я могу сделать, это добавить штрих к прямоугольнику основного вида, а не к каждому слою. Я предполагаю, что это связано с тем, что контекст рисования установлен в UIView, а не в слое, но я не могу найти способ переместить контекст ... –

+0

Да, определенно. Слои на самом деле лучше работать, чтобы что-то подобное делать. CALayer имеет встроенные свойства для cornerRadius, borderColor, borderWidth, backgroundColor и т. Д. Поэтому очень просто настроить кучу слоев и указать разные визуальные атрибуты для каждого без использования графического контекста. Ознакомьтесь с документами CALayer для этих свойств. http://j.mp/6ad0fi Если вы хотите сделать собственный чертеж Quartz внутри слоя, вы можете подклассифицировать слой и реализовать -drawInContext: или настроить делегат, который реализует -drawLayer: inContext: –

Смежные вопросы