2016-02-06 2 views
0

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

Я уверен, что существует довольно простой способ вычисления нового значения x и y, но я не смог вычислить математику. Я хочу сделать это с помощью анимации, но я могу понять это, когда у меня есть координаты.

У кого-нибудь есть предложения?

ответ

1

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

let pathLength = 50 as Double // total distance view should move 
let piFactor = M_PI/180 
let angle = 90 as Double // direction in which you need to move it 
let xCoord = outView.frame.origin.x + CGFloat(pathLength * sin(piFactor*angle)) //outView is name of view you want to animate 
let yCoord = outView.frame.origin.y + CGFloat(pathLength * cos(piFactor*angle)) 
UIView.animateWithDuration(1, delay: 0, options: UIViewAnimationOptions.CurveEaseInOut, animations: {() -> Void in 
    self.outView.frame = CGRectMake(xCoord, yCoord, self.outView.frame.size.width, self.outView.frame.size.height) 
     }, completion: { (Bool) -> Void in 
}) 
+0

Это отлично работает. Только проблема заключается в том, что он перемещает вид в том направлении, в котором он был вытащен из центра, однако (как я уже упоминал), мне нужно, чтобы он двигался в противоположном направлении. Вид немного похож на рогатку, так как вы тянете ее в одном направлении, она должна лететь обратно через представление и с экрана. – user3746428

+0

Обновление: я обнаружил, что проблема связана с кодом, который у меня уже есть. Сейчас все работает отлично. Благодаря! – user3746428

0

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

Как только у вас есть полное полярное представление вектора (угол и радиус), вы можете использовать that simple formula для преобразования в декартовое представление (x = r * cos (a), y = r * sin (a)) и, наконец, добавить что вектор координаты к центру зрения вам нужно оживить.

Смежные вопросы