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

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

Жанры

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

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

Шрифт:

#import «ViewController.h»

@interface ViewController 

@property (nonatomic, strong) UIDynamicAnimator *animator;

@end

@implementation ViewController

<# Оставшаяся часть вашего кода находится здесь #>

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

— (UIView *) newViewWithCenter:(CGPoint)paramCenter

backgroundColor:(UIColor *)paramBackgroundColor{

UIView *newView =

[[UIView alloc] initWithFrame:

CGRectMake(0.0f, 0.0f, 50.0f, 50.0f)];

newView.backgroundColor = paramBackgroundColor;

newView.center = paramCenter;

return newView;

}

Теперь, как только основной вид отобразится на экране, создадим два этих вида и также выведем их на дисплей:

UIView *topView = [self newViewWithCenter: CGPointMake(100.0f, 0.0f)

backgroundColor: [UIColor greenColor]];

UIView *bottomView = [self newViewWithCenter: CGPointMake(100.0f, 50.0f)

backgroundColor: [UIColor redColor]];

[self.view addSubview: topView];

[self.view addSubview: bottomView];

Далее добавим к видам поведение тяготения — этому мы научились в разделе 2.1:

self.animator = [[UIDynamicAnimator alloc]

initWithReferenceView: self.view];

/* Создаем тяготение */

UIGravityBehavior *gravity = [[UIGravityBehavior alloc]

initWithItems:@[topView, bottomView]];

[self.animator addBehavior: gravity];

Мы не хотим, чтобы виды выпадали за пределы экрана, достигнув его дна. Поэтому воспользуемся знаниями, приобретенными в разделе 2.2, и зададим для аниматора нижнюю границу, а также запрограммируем поведение столкновения:

/* Создаем обнаружение столкновений */

UICollisionBehavior *collision = [[UICollisionBehavior alloc]

initWithItems:@[topView, bottomView]];

collision.translatesReferenceBoundsIntoBoundary = YES;

[self.animator addBehavior: collision];

Наконец, очень важно добавить видам динамическое поведение, чтобы сделать верхний вид менее эластичным, чем нижний:

/* Теперь указываем эластичность элементов */

UIDynamicItemBehavior *moreElasticItem = [[UIDynamicItemBehavior alloc]

initWithItems:@[bottomView]];

moreElasticItem.elasticity = 1.0f;

UIDynamicItemBehavior *lessElasticItem = [[UIDynamicItemBehavior alloc]

initWithItems:@[topView]];

lessElasticItem.elasticity = 0.5f;

[self.animator addBehavior: moreElasticItem];

[self.animator addBehavior: lessElasticItem];

Итак, можете запустить приложение и посмотреть, как виды будут отскакивать от нижней границы экрана, как только ударятся об нее (рис. 2.4).

Рис. 2.4. Один вид эластичнее другого

См. также

Раздел 2.0.

Глава3. Автоматическая компоновка и язык визуального форматирования

3.0. Введение

Выравнивание компонентов пользовательского интерфейса всегда было для программиста большой проблемой. В большинстве контроллеров видов в сложных приложениях для iOS содержится множество кода, решающего такие якобы тривиальные задачи, как упорядочение на экране фрейма с графическими элементами, выравнивание компонентов по горизонтали и вертикали и обеспечение того, что компоненты будут нормально выглядеть в различных версиях iOS. Причем проблема не только в этом, ведь многие программисты желают пользоваться одними и теми же контроллерами видов на разных устройствах, например на iPhone и iPad. Из-за этого код дополнительно усложняется. Apple упростила для нас решение таких задач, предоставив возможность автоматической компоновки (Auto Layout). Автоматическая компоновка, давно применявшаяся в OS X, теперь реализована и в iOS. Чуть позже мы подробно поговорим об автоматической компоновке, но для начала я позволю себе краткое введение и расскажу, для чего она нужна.

Допустим, у вас есть кнопка, которая обязательно должна находиться в центре экрана. Отношение между центром кнопки и центром вида, в котором она находится, можно упрощенно описать следующим образом:

• свойство кнопки center.x равно свойству вида center.x;

• свойство кнопки center.y равно свойству вида center.y.

Разработчики Apple заметили, что многие проблемы, связанные с позиционированием элементов пользовательского интерфейса, решаемы с помощью простой формулы:

object1.property1 = (object2.property2 * multiplier) + constant value

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

button.center.x = (button.superview.center.x * 1) + 0

button.center.y = (button.superview.center.y * 1) + 0

С помощью этой же формулы вы можете делать некоторые по-настоящему отличные вещи при разработке пользовательского интерфейса приложений для iOS — вещи, которые ранее были просто неосуществимы. В iOS SDK вышеупомянутая формула обернута в класс, который называется NSLayoutConstraint. Каждый экземпляр этого класса соответствует ровно одному ограничению. Например, если вы хотите расположить кнопку в центре вида, владеющего этой кнопкой, то требуется центрировать координаты x и y этой кнопки. Таким образом, речь идет о создании двух ограничений. Но далее в этой главе мы познакомимся с языком визуального форматирования (Visual Format Language). Он отлично дополняет язык программирования для iOS и еще сильнее упрощает работу с макетами пользовательского интерфейса.

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

Шайтан Иван 6

Тен Эдуард
6. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
7.00
рейтинг книги
Шайтан Иван 6

Последний Герой. Том 3

Дамиров Рафаэль
3. Последний герой
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.00
рейтинг книги
Последний Герой. Том 3

Вечный. Книга VII

Рокотов Алексей
7. Вечный
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Вечный. Книга VII

На границе империй. Том 8

INDIGO
12. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 8

Барон не признает правила

Ренгач Евгений
12. Закон сильного
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Барон не признает правила

Кодекс Охотника. Книга VI

Винокуров Юрий
6. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VI

Отморозок 1

Поповский Андрей Владимирович
1. Отморозок
Фантастика:
попаданцы
5.00
рейтинг книги
Отморозок 1

Бастард Императора. Том 3

Орлов Андрей Юрьевич
3. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 3

Мы друг друга не выбирали

Кистяева Марина
1. Мы выбираем...
Любовные романы:
остросюжетные любовные романы
прочие любовные романы
современные любовные романы
5.00
рейтинг книги
Мы друг друга не выбирали

Кодекс Охотника. Книга ХХХ

Винокуров Юрий
30. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Охотника. Книга ХХХ

Ненаглядная жена его светлости

Зика Натаэль
Любовные романы:
любовно-фантастические романы
6.23
рейтинг книги
Ненаглядная жена его светлости

Огненный князь 4

Машуков Тимур
4. Багряный восход
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Прапорщик. Назад в СССР. Книга 6

Гаусс Максим
6. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прапорщик. Назад в СССР. Книга 6