iOS. Приемы программирования. Вандад Нахавандипур
Чтение книги онлайн.

Читать онлайн книгу iOS. Приемы программирования - Вандад Нахавандипур страница 74

СКАЧАТЬ угол, выраженный в радианах, под которым сможем толкнуть этот квадратный вид. Затем рассчитаем расстояние между точкой касания и центром маленького вида, полученное значение используем в качестве магнитуды толчка. Таким образом, магнитуда будет тем больше, чем дальше от центра квадратного вида находится точка касания.

      В данном разделе предполагается, что читатель понимает основы тригонометрии. Но даже если вы с ними не знакомы – ничего страшного, поскольку для работы потребуются лишь те формулы, которые я описываю в примерах кода к этому разделу. На рис. 2.2 показано, как вычисляется угол между двумя точками. Итак, я надеюсь, что объяснение получится достаточно подробным, чтобы вы могли написать собственное решение данной проблемы.

      Рис. 2.2. Расчет угла между двумя точками

      Итак, начнем с определения всех важных свойств нашего контроллера вида:

      #import "ViewController.h"

      @interface ViewController ()

      @property (nonatomic, strong) UIView *squareView;

      @property (nonatomic, strong) UIDynamicAnimator *animator;

      @property (nonatomic, strong) UIPushBehavior *pushBehavior;

      @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.view addSubview: self.squareView];

      }

      Затем применим регистратор жестов касания, чтобы обнаруживать прикосновения к виду с контроллером:

      – (void) createGestureRecognizer{

      UITapGestureRecognizer *tapGestureRecognizer =

      [[UITapGestureRecognizer alloc] initWithTarget: self

      action:@selector(handleTap:)];

      [self.view addGestureRecognizer: tapGestureRecognizer];

      }

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

      И не забудем написать метод, который будет задавать поведение столкновения СКАЧАТЬ