четверг, 7 ноября 2013 г.

Программирование iPhone 5 - обработка касаний

Обработка касаний

(c) Nikita Kultin, 2013.

В зависимости от задачи для обработки касания можно использовать UITapGestureRecognizer, UIPanGestureRecognizer и др.
UITapGesture Recognizer позволяет обработать простое касание одним или несколькими пальцами,
UIPanGestureRecognizer - сделать обработку движения, например вида "нажать-переместить-отпустить".  


Пример: обработка перемещения пальца на ImageView


0. Установить в выбранное состояние флажок User Interaction Enabled компонента imageView1  

1. Объявить в контроллере

CGPoint startPoint;
CGPoint endPoint;

2. Поместиь в контроллер объявление обработчика

// обработчик для imageView1
- (void)handleSinglePan:(UITapGestureRecognizer *)recognizer {
    
    
    if (recognizer.state == UIGestureRecognizerStateBegan)
    {
        // запомнить точку касания
        startPoint = [recognizer locationInView:self.view];
        endPoint = startPoint;
    }
    
    
    if (recognizer.state == UIGestureRecognizerStateChanged)
    {
        NSLog(@"Changed");
    }
    
    
    if (recognizer.state == UIGestureRecognizerStateEnded)
    {
        
        endPoint = [recognizer locationInView:self.view];
        float dx = endPoint.x - startPoint.x;
        float dy = endPoint.y - startPoint.y;
        //NSLog(@"%@ %f %f",recognizer.description, dx, dy);
        if (dx > 0)
        {
            NSLog(@"NEXT");
        }
        else
        {
            NSLog(@"PREV");
        }
        
    }
    
}


3, Задать обработчик для ImageView

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

 
    // создать обработчик Pan-касания
    UIPanGestureRecognizer *singleFingerPan = [[UIPanGestureRecognizer alloc] initWithTarget:self action@selector(handleSinglePan:)];
   
    // задать обработчик для объекта
    [imageView1 addGestureRecognizer:singleFingerPan]; // ВНИМАНИЕ! Установить флажок User Interaction Enabled
  

}

воскресенье, 27 октября 2013 г.

Программирование iPhone 5 - строки-ресурсы

Программирование iPhone 5

(c) Nikita Kultin, 2013.

Строки-ресурсы


Создание файла строк-ресурсов


Чтобы добавить в проект .strins файл надо: 
  1. в меню File выбрать New>File;
  2. в окне Choose a template for new file выбрать iOS>Resource>Strings File и нажать Next;
  3. в поле Save As ввести Localizable и нажать Create.


В результате описанных действий в проект будет добавлен файл Localizable.strings. В этот файл надо поместить объявление строк-ресурсов.

Строка-ресурс

Объявление строки-ресурса в общем виде выглядит так:

строка-ключ=строка-значение;

Пример:

/* 
  Localizable.strings
  sva_1

  Created by Никита Культин on 27.10.13.
  Copyright (c) 2013 Nikita Kultin. All rights reserved.
*/
"welcome"="Welcome!";

Использование строк ресурсов

Для доступа к строкам ресурсам, находящимся в файле Localizable.strings, следует использовать макрос NSLocalizedString. У макроса два параметра: первый задает ключ строки-ресурса, второй является комментарием.

Пример:

    // По умолчанию объявления строк-ресурсов в виде ключ=значение
    // находятся в файле Localizable.strings
    NSString *st1 =  NSLocalizedString(@"welcome",@"welcome");

    label1.text =    st1;

суббота, 26 октября 2013 г.

Программирование iPhone 5 - первый проект

Программирование iPhone 5

(с) Никита Культин (Nikita Kultin), 2013.

Первый проект

Начало работы

1. Запустить Xcode 5.0.1
2. В меню File выбрать команду New>Project и в появившемся окне выбрать Single View Application
3. В окне Chooce options for your new project задать название продукта (например,  Converter), имя организации-разработчика (например, Nikita Kultin), идентификатор компании (например, NkSoft) и префикс класса (например, sva). Нажать кнопку Next.
4. В следующем окне выбрать место, где будет создана папка проекта, и нажать кнопку Create.

Интерфейс

Каждому окну приложения соответствует экран (storyboard) и контроллер (ViewController). Экран обеспечивает отображение информации и взаимодействие с пользователем (на нем находятся поля отображения информации, поля редактирования, списки, кнопки и т.д.), контроллер - функциональность. 

1. В окне Project Navigator выбрать Main.Storyboard
2. В нижней части правой области главного окна щелчком на соответствующей кнопке (значке) открыть вкладку библиотеки объектов (Object Library)
3. Перетащить на storyboard (страницу) нужные объекты (например, Label, Button, Text field)
4. Настроить вид объектов (выбрать объект и в окне Attribute Inspector установить значения атрибутов)

Функциональность

1. В окне Project Navigator выбрать  svaViewController.h (здесь sva - префикс класса, указанный в начале работы над проектом)
2. Поместить в файл svaViewController.h объявления объектов интерфейса. Например, если на главной странице есть два поля отображения текста (Label), поле ввода-редактирования (Text Field) и кнопка (Button), то раздел интерфейса будет таким:

@interface svaViewController : UIViewController
{
    UITextField *textField1;    // поле редактирования
    UILabel *label1;            // поле отображения текста
    UILabel *label2;
    UIButton *button1;          // кнопка
}
@end

3. Поместить в раздел интерфейса объявления свойств, соответствующих объектам интерфейса:

@interface svaViewController : UIViewController
{
    UITextField *textField1;    // поле редактирования
    UILabel *label1;            // поле отображения текста
    UILabel *label2;
    UIButton *button1;          // кнопка
}

// свойства. Свойства обеспечивают доступ к объектам
@property (nonatomic, retain) IBOutlet UITextField *textField1;
@property (nonatomic, retain) IBOutlet UILabel *label1;
@property (nonatomic, retain) IBOutlet UILabel *label2;
@property (nonatomic, retain) IBOutlet UIButton *button1;

@end

4. Поместить в раздел интерфейса объявления функций обработки событий на компонентах интерфейса, например, события Touch Down на кнопке:

@interface svaViewController : UIViewController
{
    UITextField *textField1;    // поле редактирования
    UILabel *label1;            // поле отображения текста
    UILabel *label2;
    UIButton *button1;          // кнопка
}

// свойства. Свойства обеспечивают доступ к объектам
@property (nonatomic, retain) IBOutlet UITextField *textField1;
@property (nonatomic, retain) IBOutlet UILabel *label1;
@property (nonatomic, retain) IBOutlet UILabel *label2;
@property (nonatomic, retain) IBOutlet UIButton *button1;


//  объявление функций обработки событий:
// нажатие кнопки
-(IBAction) button1TouchDown: (id) sender;

@end

5. В секцию @implementation файла svaViewController.m (здесь sva - префикс класса, указанный в начале работы над проектом) поместить директивы @synhtesize, обеспечивающие генерацию свойств, объявленных в .h-файле:

// Директива @synthesise информирует среду разработки о необходимости создать функции, обеспечивающие
// досту к объектам textField1 и label1
//
@synthesize textField1;
@synthesize label1;
@synthesize label2;
@synthesize button1;

6. В секцию @implementation файла svaViewController.m (здесь sva - префикс класса, указанный в начале работы над проектом) поместить функцию обработки события Touch Down на кнопке:

// обработка события TouchDown на button1
-(IBAction) button1TouchDown: (id) sender
{
    NSString *st = [[NSString alloc] initWithFormat: @"Hello, %@!", textField1.text];
    label1.text = st;
}

Не трудно догадаться, в результате щелчка на кнопке в поле label1 должно появиться приветствие.


7. В функцию обработки события Did Load окна (эту функцию создает среда разработки) поместить инструкции, выполняющие настройку формы (в рассматриваемом примере - приветствие в label1 и отображение текущей даты в поле label2):


- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
    
    // настройка формы
    
    label1.text =    @"Benvenuto!"; .
    
    
    NSDate *td =[NSDate date]; // получить текущую дату и время
    
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    // задать формат отображения
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
    [dateFormatter setTimeStyle:NSDateFormatterNoStyle];    // не отображать время
    
    NSString *stDate = [dateFormatter  stringFromDate: td];
    
    NSString *s2 = [@"Today: " stringByAppendingString: stDate];
    label2.text = s2;
}

Связывание объектов контролера с объектами storyboard

Каждый объект интерфеса, находящийся на storyboard, надо связать с соответствующим ему элементом контролера. Процесс связывания рассмотрим на примере label1.

1. В окне Project Navigator выбрать Main.storyboard
2. Сделать щелчок правой кнопкой мыши на компоненте label1
3. В появившемся окне, в списке Referencing Outlets установить указатель мыши на точку, находящуюся в конце строки New Referencing Outlet, нажать левую кнопку мыши и, удерживая кнопку нажатой, перетащить указатель на изображение контроллера (View Controller - желтый значек под изображением формы).
4. Отпустить кнопку мыши и в появившемся списке выбрать объект контроллера - label1.

Аналогично надо связать второй компонент отображения текста с label2, кнопку - с button1, поле редактирования - с textField1.

Обработка события

Чтобы связать событие нажатия кнопки (Touch Down) с функцией button1TouchDown, объявленной в контроллере, надо:

1. Сделать щелчок правой кнопкой мыши на компоненте button1.
3. В появившемся окне, в списке Sent Events установить указатель мыши на точку, находящуюся в конце строки Touch Down, нажать левую кнопку мыши и, удерживая кнопку нажатой, перетащить указатель на изображение контроллера (View Controller - желтый значек под изображением формы).
4. Отпустить кнопку мыши и в появившемся списке выбрать button1TouchDown.

Запуск

Теперь приложение можно запустить на симуляторе. Если что-то не работает, например не отображается дата в поле label1 или программа не реагирует на нажатие кнопки, надо проверить, что компоненты storyboard правильно связаны с объектами контроллера (View Controller).

вторник, 3 сентября 2013 г.

Теория и технология программирования


Лекции по дисциплине Теория и технология программирования находятся в архиве блога  (2011 г.,  сентябрь - декабрь).