Покадровая анимация с использованием NSTimer по круговой траектории - PullRequest
0 голосов
/ 03 сентября 2010

Я использую NSTimer для анимации массива объектов на экране. В настоящее время они движутся слева направо. Однако я бы хотел, чтобы они двигались по кругу. Как я могу это сделать?

scrollItems = [NSTimer scheduledTimerWithTimeInterval:1.0/30.0 
                                                   target:self 
                                                 selector:@selector(scrollItems)
                                                 userInfo:nil 
                                                  repeats:YES];

- (void)scrollItems {
    for (UIImageView *anItem in itemsArray) {
        CGRect oldFrame = anItem.frame;
        anItem.frame = CGRectMake(oldFrame.origin.x+5, oldFrame.origin.y, oldFrame.size.width, oldFrame.size.height);
    }
}

Когда я говорю круговую моду, я имею в виду, что они следуют по окружности круга. Спасибо!

1 Ответ

1 голос
/ 03 сентября 2010

В основном так же - думаю, что вам нужно разрушить тригонометрию.

http://en.wikipedia.org/wiki/Trigonometry

Сейчас вы просто добавляете пять к x, чтобы заставить его двигаться.Вместо этого вам нужно вычислить новое x и y на основе sin cos и подобного дерьма и какого-то рода счетчика, чтобы сообщить ему, где на окружности он должен быть.1010 * единичный круг тоже может помочь.

Так что в любое время на часах ваш объект должен находиться в какой-то точке этого круга, правильно?Таким образом, вы должны идти от времени -> угол -> X & Y координаты на окружности.Работая в обратном направлении, вы можете получить координату xy на окружности, если у вас есть угол (число от 0 до 360 градусов) - это ссылка на единицу окружности.

Так что вам нужен угол.Этот угол будет функцией времени, верно?Таким образом, в момент времени 0 вы можете сказать, что это угол 0, и тогда вы знаете, где на окружности вы должны опираться на формулы в приведенных выше ссылках.В момент времени 1 это может быть угол 1 и т. Д. Продолжайте делать это со временем, и вы рисуете круг.Вам просто нужно выяснить, как перевести время в число от 0 до 360.Эта функция будет определять скорость, с которой движется ваш объект.

Таким образом, в основном вам нужно что-то, что может использовать время для вычисления x y.После того, как это сработает, вы можете стать умнее, и эта функция также получит скорость, центр и радиус и вернет xy, основываясь на этих вещах.На ваше усмотрение.

Извините, у меня нет времени на написание этого кода, но он вполне выполним.

...