Есть необходимость изменить внешний вид стандартных компонентов (кнопок, табов, строк таблицы и т.п.) в соответствии с дизайном. Функционал, соответственно, должен оставаться таким же, какой он есть. Среди самых типичных изменений — кнопки произвольных форм (круглые, с тенями), внешний вид табов (например, вот такой:
). Каков общий подход в таких ситуациях? Есть пара способов, хотелось бы оценить их жизнеспособность и сложность.
1. Наследование стандартных классов и переопределение некоторых методов рисования. Проблема в том, что таких методов не нашел (вряд ли apple будет их открывать наружу, если не хочет, чтобы компоненты кастомизировали).
UPD. Уточнение вопроса. Здесь не рассматривается метод drawRect. Имелись в виду методы вроде указания заднего фона табов, изменения расположения самих вкладок табов (например, перенос их снизу вверх), изменение цвета таба и прочие, которые позволяли бы без пользовательского рисования менять его внешний вид.
2. Создание компонентов руками из UIView путем рисования внешнего вида или комбинации рисования и картинок дизайна. Здесь проблема в том, что придется еще и программировать немалый функционал (в т.ч. и анимацию).
UPD. 3. Использование метода drawRect. Насколько увидел из компонентов, созданных другими, это единственный способ. Соответственно, минус в том, что не всегда можно использовать дизайн в виде картинок (только если сочетать его с рисованием примитивов, кривых и т.п. операциями). Ну и рост сложности в зависимости от устройства компонента.
Может, есть какие-нибудь библиотеки компонентов или хотя бы подходы? Может, есть какие-то приложения с открытым кодом, где подобное реализовано?