Если бы вы делали это для Mac, вы бы создали фреймворк. Тем не менее, вы упоминаете UIView
, так что, очевидно, вы работаете с iPhone. Apple не позволяет приложениям iPhone динамически связываться с другими библиотеками во время выполнения, поэтому единственный вариант - создать статическую библиотеку. Статическая библиотека связана с исполняемым файлом приложения при сборке.
Насколько мне известно, в Xcode нет шаблона проекта статической библиотеки. Скорее всего, вам придется начать с другого шаблона iPhone Xcode и добавить цель статической библиотеки. Держитесь за цель приложения по умолчанию; Вы можете использовать это для создания простого тестового приложения, чтобы убедиться, что библиотека действительно работает.
Чтобы фактически использовать библиотеку в приложении, вам понадобятся две вещи: скомпилированная библиотека (с расширением .a) и все файлы заголовков. В готовом приложении вы будете ссылаться на статическую библиотеку, и вам потребуется #import
файлы заголовков, чтобы компилятор понимал, какие классы, функции и т. Д. Доступны для него. (Обычный способ - создать один заголовочный файл, который импортирует все остальные. Таким образом, вам нужно импортировать только один файл в исходные файлы.)
Что касается создания собственных пользовательских шаблонов, здесь есть простое руководство, с которого следует начать: http://www.macresearch.org/custom_xcode_templates Возможно, вы можете скопировать шаблоны по умолчанию и просто настроить их в соответствии с вашими целями.
Синтаксис структуры выглядит следующим образом:
typedef struct _MyPoint {
CGFloat x;
CGFloat y;
} MyPoint;
Структуры объявляются в заголовочных файлах, так что вы можете (я полагаю) Ctrl + двойной щелчок по имени структуры, чтобы увидеть, как она объявлена.
Еще один маленький трюк для создания структур - сделать что-то вроде этого:
MyPoint aPoint = (MyPoint){ 1.5f, 0.25f };
Поскольку компилятор знает порядок полей в структуре, он может очень легко сопоставить значения, указанные в фигурных скобках, с соответствующими полями. Конечно, удобнее иметь такую функцию, как MyPointMake
, поэтому вы можете написать так:
MyPoint MyPointMake(CGFloat x, CGFloat y)
return (MyPoint){ x, y };
}
Обратите внимание, что это функция, а не метод, поэтому она находится вне контекста @interface
или @implementation
. Хотя я не думаю, что компилятор будет жаловаться, если вы определите его в контексте @implementation
.
CGPointMake
определяется как функция, известная как inline
. Вы можете увидеть определение этого в заголовочных файлах Какао, также. (Разница между встроенной функцией и обычной функцией заключается в том, что компилятор может заменить вызов на CGPointMake
копией CGPointMake
, что позволяет избежать затрат на создание вызов функции. Это довольно незначительная оптимизация, но для такой простой функции это имеет смысл.)