Поиск по этому блогу

среда, 17 августа 2011 г.

iPhone/iPad программирование

Данная статья представляет собой введение в программирование под iPhone/iPad. В ней будут рассмотрены инструменты, необходимые для создания приложений, а также создано небольшое приложение для iPhone.

В 2010 году на конференции разработчиков WWDC компания Apple представила новую версию Xcode 4 (предыдущая версия - Xcode 3). В дальнейшем мною будет использоваться именно эта версия среды разработки.

Для установки и первого запуска необходим любой Mac с процессором Intel и установленной Mac OS X 10.6 Snow Leopard (или выше).

Xcode 3 и Xcode 4 можно скачать бесплатно с сайта developer.apple.com.

Установка достаточно проста - нужно следовать инструкциям установщика, убедиться, что отмечен пункт iPhone SDK и не менять стандартное место установки.

После установки запустить Xcode можно из папки Macintosh HD -> Developer -> Applications.
Итак, всё готово, чтобы написать первое приложение и одновременно разобраться в новом интерфейсе программы.

Запустим Xcode 4, после запуска появится окно приветствия:
В левой части располагаются "команды" «Создать новый проект», «Создать проект из репозитория» и ссылки на справочную информацию. В правой части окна расположен список существующих проектов.


Нажмем “Create a new Xcode project” и выберем View-based Application.

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


Далее выбираем куда сохранить проект. Я рекомендую создать отдельную папку для хранения всех проектов, например, создать папку Developer в домашней директории:


После того, как вы нажали Create, перед вами появляется главное окно программы:
В левой части расположен список файлов, входящих в проект, над ним небольшие иконки, открывающие другие вкладки: поиск, логи, отладка.


Xcode поддерживает одновременное использование вкладок, которые очень похожи на вкладки в браузерах, при этом каждую вкладку можно организовать как отдельное рабочее пространство, разделив экран на несколько частей:
Одним из ключевых отличий Xcode 4 от предшественника является интегрированный Interface Builder, который раньше был отдельной программой. Interface Builder, как понятно из названия, предоставляет графический интерфейс для построения интерфейсов приложений перетягиванием элементов из библиотеки и настройки свойст в Инспекторе (аналогичном инспектору в стандартных приложениях Mac OS X).
Итак, рассмотрим файлы в данном проекте.

В папке FirstApp находятся файлы, с которыми мы чаще всего будем работать:

1) Пары файлов с расширениями .h и .m - это интерфейсы и реализации наших классов соответственно.

2) Файлы с расширением .xib (или .nib) хранят наш графический интерфейс.

3) В файлах .plist хранятся настройки нашего приложения.

В нашем первом приложении мы используем два элемента - слайдер (UISlider) и текстовое поле (UILabel). Приложения для iOS создаются с использованием паттерна MVC (Model-View-Controller). О нём я расскажу в следующих статьях. Хорошей практикой является написание в первую очередь API (программного интерфейса приложения), и далее назначение элементов интерфейса для взаимодействия с ним.

Но в сегодняшнем примере мы пойдем по другому пути. Наше приложение будет выводить на экран значение текущей позиции слайдера и обновлять его при каждом перемещении слайдера.

Откройте файл FirstAppViewController.xib, в появившемся Interface Builder перетяните элементы UILabel и UISlider в окно нашего приложения.
Можно менять размер элементов, а также настраивать вид их отображения, используя свойства в правой части окна.

Приступим к реализации нашего приложения. Для этого откроем файл FirstAppViewController.m и нажмем кнопку Assistant, чтобы в правой части экрана появился связанный с ним файл FirstAppViewController.h
Как мы помним, в нашем приложении два объекта - UILabel, отображающий строки, и UISlider имеющий свойство value (значение), передающее десятичное значение float (с плавающей точкой) позиции слайдера.

В файле .h мы объявляем переменные, методы, объекты, а в файле .m описываем их реализацию.

Начем с FirstAppViewController.h. В поле

@interface FirstAppViewController : UIViewController {
    // объекты и переменные
}

между фигурными скобками {…} добавим наши объекты UILabel и UISlider:

@interface FirstAppViewController : UIViewController {
    IBOutlet UILabel *labelValue;
    IBOutlet UISlider *sliderValue;
}

после закрывающейся скобки «}» и перед @end располагаются методы. Подробнее о методах я расскажу в следующих статьях. Сейчас можно представить, что это аналог функции в языке Си, адресованный объекту.

В нашем примере будет всего один метод - (IBAction)valueChanged;

Перейдем к реализации нашего класса. Существующий код в файле FirstAppViewController.m можно удалить, оставив

#import "FirstAppViewController.h"

@implementation FirstAppViewController

@end

Между @implementation и @end располагается реализация нашего класса. Директива #import сообщает, что мы можем использовать описания из головного (header) файла нашего класса.

В нашей реализации всего один метод:

@implementation FirstAppViewController

- (IBAction)valueChanged {

}

@end

Нам нужно получить значение из UISlider, для чего мы используем дополнительную переменную:

float sliderValue;

Далее присваиваем этой переменной значение текущей позиции слайдера:

sliderValue = [slider value];

Скобки [получатель сообщение] типичный синтаксис Objective-C, когда объекту (получателю) отправляется метод (сообщение) и в итоге возвращается соответствующее значение.

Теперь у нас есть переменная, хранящая значение UISlider в формате float, однако UILabel может отображать только строковые данные (формат NSString). Необходимо отобразить float sliderValue как строку. Для этого используем метод для работы со строками -stringWithFormat, возвращающий объект строку NSString.

NSString *labelValue = [NSString stringWithFormat:@"%f", sliderValue];

Выше мы создаем объект labelValue, используя метод с аргументом stringWithFormat:аргумент. Аргументом выступает sliderValue.

Далее выводим строку в UILabel:

[label setText:labelValue];

Если мы запустим приложение и изменим положение слайдера ничего не произойдет. Дело в том, что мы не связали элементы интерфейса в Interface Builder с нашими объектами в реализации.

Interface Builder предоставляет графический интерфейс для решения нашей задачи. Откроем файл FirstAppViewController.xib и, нажав Ctrl, перетянем File’s Owner на UILabel в окне нашего приложения, после чего выберем label, повторим тоже самое с UISlider. Следует отметить, когда мы связываем Outlets, направление перетягивания - от File’s Owner к элементу интерфейса, а когда связываем метод (Action) - наоборот. Поэтому произведём теже действия с нажатой кнопкой Ctrl от UISlider к File’s Owner и выберем valueChanged:


Теперь можно запускать приложение и перемещать слайдер, наблюдая изменяющееся значение в UILabel. Значение, которое мы видим в UILabel, по умолчанию изменяется от 0 до 1 и установлено в положении 0.5.

Однако эти значения можно настроить в Interface Builder, выделив UISlider в окне приложения:

Комментариев нет:

Отправить комментарий