Чтение онлайн

на главную - закладки

Жанры

iOS. Приемы программирования

Нахавандипур Вандад

Шрифт:

10.6. Обнаружение щипка

Постановка задачи

Необходимо предоставить пользователю возможность выполнять движения щипка.

Решение

Создайте экземпляр класса UIPinchGestureRecognizer и добавьте его к вашему целевому виду, воспользовавшись методом экземпляра addGestureRecognizer:, относящимся к классу UIView:

— (void)viewDidLoad {

[super viewDidLoad];

CGRect labelRect = CGRectMake(0.0f, /* X */

0.0f, /* Y */

200.0f, /* Ширина */

200.0f); /* Высота */

self.myBlackLabel = [[UILabel alloc] initWithFrame: labelRect];

self.myBlackLabel.center = self.view.center;

self.myBlackLabel.backgroundColor = [UIColor blackColor];

/* Без
этой строки распознаватель щипков работать не будет. */

self.myBlackLabel.userInteractionEnabled = YES;

[self.view addSubview: self.myBlackLabel];

/* Создаем распознаватель щипков. */

self.pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc]

initWithTarget: self

action:@selector(handlePinches:)];

/* Добавляем этот распознаватель жестов к виду. */

[self.myBlackLabel

addGestureRecognizer: self.pinchGestureRecognizer];

}

Контроллер вида определяется так:

#import «ViewController.h»

@interface ViewController 

@property (nonatomic, strong)

UIPinchGestureRecognizer *pinchGestureRecognizer;

@property (nonatomic, strong) UILabel *myBlackLabel;

@property (nonatomic, unsafe_unretained) CGFloat currentScale;

@end

Обсуждение

Щипки позволяют пользователю легко масштабировать (увеличивать и уменьшать) элементы графического интерфейса. Например, браузер Safari в iOS дает возможность щипком на веб-странице увеличивать ее содержимое. Щипок работает в двух направлениях: увеличение и уменьшение масштаба. Это непрерывный жест, который на сенсорном экране всегда выполняется двумя пальцами.

Данный распознаватель жестов может пребывать в следующих состояниях:

• UIGestureRecognizerStateBegan;

• UIGestureRecognizerStateChanged;

• UIGestureRecognizerStateEnded.

Как только щипок распознан, вызывается действующий метод целевого объекта (и будет последовательно вызываться до тех пор, пока щипок не окончится). В действующем методе вы получаете

доступ к двум очень важным методам распознавателя щипков: scale и velocity. scale — это коэффициент, на который нужно изменить размер элемента графического интерфейса по осям X и Y, чтобы отразить таким образом размер пользовательского жеста. velocity — это скорость щипка, измеряемая в пикселах в секунду. Скорость имеет отрицательное значение, если пальцы движутся навстречу друг другу, и положительное — если они перемещаются в разные стороны.

Значение свойства scale можно передать функции CGAffineTransformMakeScale из фреймворка Core Graphics, чтобы получить аффинное преобразование. Такое преобразование применимо к свойству transform любого экземпляра класса UIView, оно позволяет изменять преобразование этого элемента. Мы воспользуемся этой функцией следующим образом:

— (void) handlePinches:(UIPinchGestureRecognizer*)paramSender{

if (paramSender.state == UIGestureRecognizerStateEnded){

self.currentScale = paramSender.scale;

} else if (paramSender.state == UIGestureRecognizerStateBegan &&

self.currentScale!= 0.0f){

paramSender.scale = self.currentScale;

}

if (paramSender.scale!= NAN &&

paramSender.scale!= 0.0){

paramSender.view.transform =

CGAffineTransformMakeScale(paramSender.scale,

paramSender.scale);

}

}

Поскольку свойство scale распознавателя жестов сбрасывается всякий раз, когда регистрируется новый щипок, мы сохраняем последнее значение этого свойства в общем свойстве экземпляра (Instance Property) контроллера вида, называемом currentScale. В следующий раз, когда будет распознан новый жест, мы отсчитываем коэффициент масштабирования от последнего зафиксированного значения, что и продемонстрировано в коде.

Глава 11. Сетевые функции, JSON, XML и Twitter

11.0. Введение

Стоит подключить приложение iOS к Интернету — и оно становится гораздо интереснее. Например, представьте себе приложение, которое предлагает пользователям великолепные фоновые картинки для Рабочего стола. Пользователь может выбрать вариант из большого списка изображений и присвоить любой из этих рисунков в качестве фонового операционной системе iOS. А теперь вообразим себе приложение, которое делает то же самое, но обновляет ассортимент имеющихся изображений каждый день, неделю или месяц. Пользователь после какого-то перерыва возвращается к работе с программой и — опа! Масса новых фоновых изображений динамически загружается в приложение. В этом и есть изюминка работы с веб-службами и Интернетом. Реализовать такие функции не составляет труда, если обладать базовыми знаниями о работе в Сети, применении JSON, XML и Twitter. Ну, еще от разработчика приложения требуется известная креативность.

Поделиться:
Популярные книги

Академия

Сай Ярослав
2. Медорфенов
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Академия

НОВОСТИ ИЗ КРЕМЛЯ

Зенькович Николай Александрович
Научно-образовательная:
история
5.00
рейтинг книги
НОВОСТИ ИЗ КРЕМЛЯ

История одного гоблина. Два в одном

Болотов Андрей Тимофеевич
2. История одного гоблина
Фантастика:
фэнтези
юмористическое фэнтези
7.00
рейтинг книги
История одного гоблина. Два в одном

Катуков против Гудериана

Прудников Виктор
Сражения Великой Отечественной Войны
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Катуков против Гудериана

Олимпия Клевская

Дюма-отец Александр
Приключения:
исторические приключения
6.80
рейтинг книги
Олимпия Клевская

Красавица Альмиу

Мак Иван
23. Легенды Вселенной
Фантастика:
боевая фантастика
5.00
рейтинг книги
Красавица Альмиу

Кровь обязывает. Трилогия

Обатуров Сергей Георгиевич
Кровь обязывает
Фантастика:
фэнтези
4.55
рейтинг книги
Кровь обязывает. Трилогия

Брат, стреляй первым!

Колычев Владимир Григорьевич
1. Брат
Детективы:
прочие детективы
7.00
рейтинг книги
Брат, стреляй первым!

Кукушка

Скирюк Дмитрий Игоревич
4. Жуга
Фантастика:
фэнтези
8.40
рейтинг книги
Кукушка

Неучтенный элемент. Том 12

NikL
12. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 12

Камень. Книга вторая

Минин Станислав
2. Камень
Фантастика:
фэнтези
8.52
рейтинг книги
Камень. Книга вторая

Антисоветский проект

Кара-Мурза Сергей Георгиевич
Научно-образовательная:
политика
7.00
рейтинг книги
Антисоветский проект

Демон пробуждается

Сальваторе Роберт Энтони
1. Демонические войны
Фантастика:
фэнтези
7.20
рейтинг книги
Демон пробуждается

Журнал "Если" 1999, номер 11

Силверберг Роберт
11. Журнал Если 1999
Фантастика:
социально-философская фантастика
6.25
рейтинг книги
Журнал Если 1999, номер 11