Читаем iOS. Приемы программирования полностью

/* Из этого объявления свойства можно удалить метки nonatomic

и unsafe_unretained. Имея значение с плавающей точкой, компилятор

автоматически сгенерирует для нас обе эти метки. */

@property (nonatomic, unsafe_unretained)

CGFloat rotationAngleInRadians;

@end

@implementation ViewController

Прежде чем продолжать, рассмотрим, за что отвечает каждое из этих свойств и почему они объявляются:

• helloWorldLabel — это метка, которую мы должны поставить на виде в контроллере вида. Потом напишем код для вращения этой метки. Вращение будет начинаться всякий раз, когда пользователь станет совершать вращательные жесты на виде, обладающем этой меткой (в данном случае речь идет о виде нашего контроллера вида);

• rotationGestureRecognizer — это экземпляр распознавателя жестов вращения, который мы позже выделим и инициализируем;

• rotationAngleInRadians — это значение, которое будет запрашиваться как точный угол поворота метки. Изначально это свойство устанавливается в нуль. Поскольку углы вращения, сообщаемые распознавателем, сбрасываются перед каждым новым пуском распознавателя, можно всякий раз сохранять значение распознавателя жестов вращения, когда он переходит в состояние UIGestureRecognizerStateEnded. В следующий раз при запуске жеста мы суммируем предыдущее значение вращения и новое значение вращения, получив в результате общий угол вращения.

Размер метки и ее центральная точка могут выбираться произвольно. Аналогично непринципиально и положение самой метки, так как мы просто пытаемся вращать метку вокруг ее центра независимо от того, в какой части вида она расположена. Единственный важный аспект здесь заключается в том, что в универсальных приложениях положение метки в контроллере вида следует рассчитывать динамически при работе с разными целями (то есть устройствами), основываясь на размерах ее родительского вида. Если приложение запускается на иных устройствах, кроме iPhone и iPad, метка может оказываться в различных точках экрана.

Применяя свойство метки center и устанавливая эту точку в центре объемлющего вида, мы выравниваем по центру и содержимое самой метки. Преобразование вращения, которое мы применим к данной метке, станет вращать метку вокруг ее центральной точки. А если содержимое метки выровнено по левому или по правому краю и ее истинный контур шире, чем пространство, необходимое для полного отображения содержимого (без отсечения), то вращаться такая метка будет довольно неестественно и не вокруг центра. Если вам любопытно, как это выглядит на практике, попробуйте выровнять содержимое метки по левому или правому краю и посмотрите, что получится.

Как показано в подразделе «Решение» данного раздела, созданный нами распознаватель жестов вращения будет отправлять свои события методу handleRotations:. Вот реализация этого метода:

— (void) handleRotations:(UIRotationGestureRecognizer *)paramSender{

if (self.helloWorldLabel == nil){

return;

}

/* Берем предыдущее значение вращения и суммируем его с актуальным

значением вращения. */

self.helloWorldLabel.transform =

CGAffineTransformMakeRotation(self.rotationAngleInRadians +

paramSender.rotation);

/* Когда значение завершится, сохраняем полученный угол для

дальнейшего использования. */

if (paramSender.state == UIGestureRecognizerStateEnded){

self.rotationAngleInRadians += paramSender.rotation;

}

}

Распознаватель жестов вращения посылает нам информацию об углах вращения очень интересным способом. Этот распознаватель является непрерывным. Это означает, что распознаватель приступает к вычислению углов, как только пользователь начинает жест вращения, и отправляет обновления методу-обработчику с краткими интервалами до тех пор, пока пользователь не закончит жест. В каждом сообщении начальный угол воспринимается как нулевой, и это сообщение содержит информацию о начальной точке вращения (достигнутой после окончания предыдущего акта вращения) и конечной точке. Таким образом, полный эффект от данного жеста можно узнать, только суммировав значения углов, полученные в результате различных событий. Движение по часовой стрелке дает положительное угловое значение, а против часовой стрелки — отрицательное.

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Искусство управления IT-проектами
Искусство управления IT-проектами

В отличие от множества трудов, посвященных руководству проектами и командами, в этой книге не проповедуются никакие новые учения и не превозносятся великие теории. Скотт Беркун считает залогом успеха практику и разнообразие подходов. В книге описываются основные сложности и проблемные ситуации, возникающие в работе менеджера проекта, даны рекомендации по выходу из них.Издание предназначено не только для лидеров команд и менеджеров высшего звена, но и для программистов, тестеров и других исполнителей конкретных проектных заданий. Также оно будет полезно студентам, изучающим бизнес-менеджмент, проектирование изделий или программную инженерию.Текст нового издания значительно переработан автором с целью добиться большей ясности, кроме того, книга дополнена новым приложением и более чем 120 практическими упражнениями.

Скотт Беркун

Деловая литература
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

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

Программирование, программы, базы данных / Программирование / Книги по IT

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных