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




>[self.view addSubview: self.squareView];

>}

>Далее создадим вид с точкой привязки:

>– (void) createAnchorView{


>self.anchorView = [[UIView alloc] initWithFrame:

>CGRectMake(120.0f, 120.0f, 20.0f, 20.0f)];

>self.anchorView.backgroundColor = [UIColor redColor];

>[self.view addSubview: self.anchorView];


>}


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


>– (void) createGestureRecognizer{

>UIPanGestureRecognizer *panGestureRecognizer =

>[[UIPanGestureRecognizer alloc] initWithTarget: self

>action:@selector(handlePan:)];

>[self.view addGestureRecognizer: panGestureRecognizer];

>}


>– (void) createAnimatorAndBehaviors{


>self.animator = [[UIDynamicAnimator alloc]

>initWithReferenceView: self.view];


>/* Создаем распознавание столкновений */

>UICollisionBehavior *collision = [[UICollisionBehavior alloc]

>initWithItems:@[self.squareView]];

>collision.translatesReferenceBoundsIntoBoundary = YES;


>self.attachmentBehavior = [[UIAttachmentBehavior alloc]

>initWithItem: self.squareView

>point: self.squareViewAnchorView.center

>attachedToAnchor: self.anchorView.center];

>[self.animator addBehavior: collision];

>[self.animator addBehavior: self.attachmentBehavior];

>}


>– (void)viewDidAppear:(BOOL)animated{

>[super viewDidAppear: animated];


>[self createGestureRecognizer];

>[self createSmallSquareView];

>[self createAnchorView];

>[self createAnimatorAndBehaviors];

>}


Как видите, мы реализуем поведение привязки с помощью его метода экземпляра initWithItem: point: attachedToAnchor:. Этот метод принимает следующие параметры:

• initWithItem – динамический элемент (в нашем примере – вид), который должен быть подключен к точке привязки;

• point – точка внутри динамического элемента, которая должна быть соединена с точкой привязки. В данном поведении центральная точка элемента используется для установки соединения с точкой привязки. Но вы можете изменить этот параметр, присвоив ему другое значение;

• attachedToAnchor – сама точка привязки, измеряемая как значение CGPoint.

Теперь, когда мы соединили верхний правый угол квадратного вида с точкой привязки (представленной как вид точки привязки), необходимо продемонстрировать, что, двигая точку привязки, мы опосредованно будем двигать и квадратный вид. Вернемся к методу createGestureRecognizer, написанному ранее. Там мы задействовали регистратор жестов касания, который будет отслеживать движение пальца пользователя по экрану. Мы решили обрабатывать регистратор жестов в методе handlePan: вида и реализуем этот метод так:


>(void) handlePan:(UIPanGestureRecognizer *)paramPan{


>CGPoint tapPoint = [paramPan locationInView: self.view];

>[self.attachmentBehavior setAnchorPoint: tapPoint];

>self.anchorView.center = tapPoint;


>}


Здесь мы обнаруживаем в нашем виде движущуюся точку, а потом перемещаем в нее точку привязки. После того как мы это сделаем, произойдет прикрепление и мы сможем двигать также маленький квадрат.

См. также

Разделы 2.0 и 10.3.

2.5. Добавление эффекта динамического зацепления к компонентам пользовательского интерфейса

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

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