Вандад Нахавандипур - iOS. Приемы программирования
- Название:iOS. Приемы программирования
- Автор:
- Жанр:
- Издательство:Питер
- Год:2014
- Город:Санкт-Петербург
- ISBN:978-5-496-01016-0
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Вандад Нахавандипур - iOS. Приемы программирования краткое содержание
Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.
Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.
iOS. Приемы программирования - читать онлайн бесплатно ознакомительный отрывок
Интервал:
Закладка:
— (void) handleTaps:(UITapGestureRecognizer*)paramSender{
NSUInteger touchCounter = 0;
for (touchCounter = 0;
touchCounter < paramSender.numberOfTouchesRequired;
touchCounter++){
CGPoint touchPoint =
[paramSender locationOfTouch: touchCounter
inView: paramSender.view];
NSLog(@"Touch #%lu: %@",
(unsigned long)touchCounter+1,
NSStringFromCGPoint(touchPoint));
}
}
В этом коде мы дожидаемся, пока произойдет такое количество нажатий, которое требуется, чтобы распознаватель жестов-нажатий начал работу. Беря за основу это количество, мы узнаем точку, в которой было сделано каждое нажатие. В зависимости от того, работаете ли вы с реальным устройством или с симулятором, в окне консоли будут выведены примерно такие результаты:
Touch #1: {107, 186}
Touch #2: {213, 254}
При работе с симулятором можно имитировать два одновременных нажатия, удерживая клавишу Option и передвигая указатель мыши по экрану симулятора. На экране появятся две концентрические точки касания.
Кроме того, необходимо упомянуть о методе NSStringFromCGPoint, который, как понятно из его названия [10] На преобразование указывает компонент from из названия метода. — Примеч. пер.
, может преобразовать структуру CGPoint в строку NSString. Эта функция применяется для превращения CGPoint каждого прикосновения к экрану в NSString, а данную строку мы уже можем записать в окне консоли, воспользовавшись NSLog. Чтобы открыть окно консоли, выполните Run — Console (Запустить— Консоль).
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. Ну, еще от разработчика приложения требуется известная креативность.
iOS SDK позволяет подключаться к Интернету, получать и отсылать данные. Это делается с помощью класса NSURLConnection. Сериализация и десериализация JSON выполняется в классе NSJSONSerialization. Синтаксический разбор XML производится с помощью NSXMLParser, а соединение с Twitter обеспечивается во фреймворке Twitter.
В SDK iOS 7 появились новые классы, работать с которыми мы научимся в этой главе. В частности, поговорим о классе NSURLSession, который управляет соединяемостью веб-сервисов и решает эту задачу более основательно, чем класс NSURLConnection. О соединяемости мы также поговорим далее в этой главе.
11.1. Асинхронная загрузка с применением NSURLConnection
Интервал:
Закладка: