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