Размер шрифта
-
+

iOS. Приемы программирования - стр. 94

• elasticity – это значение с плавающей точкой в диапазоне от 0 до 1. Оно указывает, насколько эластичным должен быть элемент. Чем выше это значение, тем более пластичным и «желеобразным» будет этот элемент с точки зрения аниматора. О том, что такое эластичность, подробно рассказано в разделе 2.5.

• density – это значение с плавающей точкой в диапазоне от 0 до 1 (по умолчанию применяется значение 1). Оно не используется непосредственно для воздействия на поведение динамических поведений элементов, но с его помощью аниматор рассчитывает массу объектов и то, как эта масса отражается на визуальных эффектах. Например, если вы столкнете один элемент с другим (см. раздел 2.3), но у одного из них будет плотность 1, а у другого – 0,5, то при одинаковых высоте и ширине обоих элементов масса первого элемента будет больше, чем масса второго. Аниматор вычисляет массу элементов, исходя из их плотности и размеров экрана. Поэтому если вы столкнете маленький вид с высокой плотностью с большим видом с очень низкой плотностью, то маленький вид, в зависимости от конкретного размера и плотности этого элемента, может быть воспринят аниматором как более массивный объект, нежели крупный вид. В таком случае, аниматор может сильнее оттолкнуть тот элемент, который на экране кажется более крупным, тогда как толчок, сообщаемый крупным элементом мелкому, получится не столь значительным.


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


>#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]

Страница 94