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

Чтение книги онлайн.

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

iOS. Приемы программирования - Вандад Нахавандипур Бестселлеры O’Reilly (Питер)

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

style="font-size:15px;">      [super viewDidAppear: animated];

      [self createGestureRecognizer];

      [self createSmallSquareView];

      [self createAnimatorAndBehaviors];

      }

      Отлично. Теперь, взглянув на файл реализации метода createGestureRecognizer, вы увидите, что мы устанавливаем регистратор жестов касаний в методе контроллера вида – этот метод называется handleTap:. В методе handleTap: вычисляем расстояние между центральной точкой маленького квадратного вида и той точкой опорного вида, до которой дотронулся пользователь. В результате имеем магнитуду силы толчка. Кроме того, рассчитаем угол между центром маленького квадратного вида и точкой касания, чтобы определить угол толчка:

      – (void) handleTap:(UITapGestureRecognizer *)paramTap{

      /* Получаем угол между центральной точкой квадратного вида и точкой касания */

      CGPoint tapPoint = [paramTap locationInView: self.view];

      CGPoint squareViewCenterPoint = self.squareView.center;

      /* Вычисляем угол между центральной точкой квадратного вида и точкой касания, чтобы определить угол толчка

      Формула для определения угла между двумя точками:

      arc tangent 2((p1.x – p2.x), (p1.y – p2.y)) */

      CGFloat deltaX = tapPoint.x – squareViewCenterPoint.x;

      CGFloat deltaY = tapPoint.y – squareViewCenterPoint.y;

      CGFloat angle = atan2(deltaY, deltaX);

      [self.pushBehavior setAngle: angle];

      /* Используем расстояние между точкой касания и центром квадратного вида для вычисления магнитуды толчка

      Формула определения расстояния:

      Квадратный корень из ((p1.x – p2.x)^2 + (p1.y – p2.y)^2) */

      CGFloat distanceBetweenPoints =

      sqrt(pow(tapPoint.x – squareViewCenterPoint.x, 2.0) +

      pow(tapPoint.y – squareViewCenterPoint.y, 2.0));

      [self.pushBehavior setMagnitude: distanceBetweenPoints / 200.0f];

      }

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

      Теперь, запустив приложение, вы сначала увидите маленький зеленый квадрат в центре экрана. Дотроньтесь до экрана в любой точке поля, окружающего квадрат (белое пространство), чтобы зеленый квадрат (вид) стал двигаться. В данном примере я беру расстояние между точкой касания и центром квадрата и делю его на 200, чтобы получить реалистичную магнитуду толчка, но вы в данном примере можете увеличить ускорение, выбрав, скажем, значение 100, а не 200. Всегда лучше экспериментировать с разными числовыми значениями, чтобы подобрать оптимальный вариант для вашего приложения.

      См. также

      Раздел 2.2.

      2.4. Прикрепление нескольких динамических элементов друг к другу

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

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

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