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

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


Скачать книгу

поведение прикрепления, относящееся к типу UIAttachmentBehavior, с помощью метода экземпляра initWithItem: point: attachedToAnchor: этого класса. Добавьте это поведение к аниматору (см. раздел 2.0), отвечающему за динамику и физику движения.

      Обсуждение

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

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

      В этом примере мы собираемся создать такой эффект, который продемонстрирован на рис. 2.3.

      Рис. 2.3. Именно такого эффекта мы хотим добиться в данном разделе с помощью поведения прикрепления

      Как видите, на экране находятся три вида. Основной вид расположен в центре, в правом верхнем углу этого вида есть еще один вид, более мелкий. Маленький вид – это и есть тот элемент, который будет следовать за точкой привязки, по принципу, который я описал в примере с фотографией. Наконец, необходимо отметить, что точка привязки в данном примере будет перемещаться по экрану под действием жеста панорамирования и регистратора соответствующих жестов (см. раздел 10.3). Затем в результате таких движений станет двигаться большой вид, расположенный в центре экрана. Итак, начнем с определения необходимых свойств контроллера вида:

      #import "ViewController.h"

      @interface ViewController ()

      @property (nonatomic, strong) UIView *squareView;

      @property (nonatomic, strong) UIView *squareViewAnchorView;

      @property (nonatomic, strong) UIView *anchorView;

      @property (nonatomic, strong) UIDynamicAnimator *animator;

      @property (nonatomic, strong) UIAttachmentBehavior *attachmentBehavior;

      @end

      @implementation ViewController

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

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

      – (void) createSmallSquareView{

      self.squareView =

      [[UIView alloc] initWithFrame:

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

      self.squareView.backgroundColor = [UIColor greenColor];

      self.squareView.center = self.view.center;

      self.squareViewAnchorView = [[UIView alloc] initWithFrame:

      CGRectMake(60.0f, 0.0f, 20.0f, 20.0f)];

      self.squareViewAnchorView.backgroundColor = [UIColor brownColor];

      [self.squareView addSubview: self.squareViewAnchorView];

      [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];

      }

      После этого потребуется