Ответ 1
Что делать с подклассом
Вместо UIView
вы, вероятно, захотите подкласса UIControl
. Этот класс имеет функциональность для сборки шаблона Target/Action, в которой вы можете использовать для реагирования на действия, созданные вашим настраиваемым элементом управления. Большинство элементов на UIKit, таких как кнопки и слайдеры, наследуют от UIControl
по этой конкретной причине.
Визуализация вашего подкласса Рисование действительно зависит от того, чего вы хотите достичь, и от того, какие части вы хотите оживить. Вы можете использовать изображения, рисовать используя кварц или OpenGL в зависимости от того, что вам нужно или что вы предпочитаете. Просто используйте технику для достижения желаемого эффекта самым простым способом. Несколько изображений могут использоваться для обработки разных состояний (нажатых и т.д.) Или для анимации спрайтов. CALayers приятно легко поворачивать или перемещаться.
Независимо от того, какую технологию вы используете, вы, вероятно, будете использовать входящие сенсорные события для управления анимацией. В случае управления циферблатом вы, например, будете управлять количеством вращения, основанным на перемещении координат y.
Чтобы проиллюстрировать: например, я использовал изображения, если мой элемент управления нужно было изменить только при нажатии, например: просто поменяйте изображения. Мне также нравится использовать CALayer
много, что дает вам простые способы создания границ, масок, градиентов и радиуса угла, а также легко анимированных.
Использование в Interface Builder С помощью Cocoa на рабочем столе можно было создать пользовательские палитры IB для пользовательских элементов управления. У iOS никогда не было этой функциональности, и я не уверен, что модули IB доступны для Xcode 4.
Таким образом, единственным способом обработки пользовательских подклассов в настоящее время является использование UIView
в IB и установка поля "Пользовательский класс" в Identity Inspector для имени вашего настраиваемого класса. Таким образом, у вас есть представление, которое вы можете развернуть и размер. В Interface Builder это просто прямоугольник, при запуске вашего приложения XIB фактически десериализует это представление в ваш пользовательский класс.
При использовании UIControl
вы бесплатно получаете механизмы target/action. Таким образом, вы можете подключить свои события касания к любому объекту в IB, как и любой другой стандартный элемент управления UIKit.
Одно замечание: если у вас есть пользовательские селектора - initWith....:
, они не будут вызываться. Ваш класс десериализуется из XIB, поэтому вы должны использовать - initWithCoder:(NSCoder *)aDecoder;
как инициализацию.