Помогите мне заново понять, как использовать синус для колебания графики в (Objective) C - PullRequest
0 голосов
/ 20 декабря 2010

Я чувствую себя глупо, спрашивая об этом, но я, кажется, забыл, как эффективно использовать синус.

Я работаю над приложением для iPad, поэтому я в ObjectiveC, и я просто пытаюсь получитьUIView, чтобы колебаться медленно.Просто использование position.y + sin (counter) заставляет его двигаться так быстро, что он вибрирует, и я не могу определить период для его замедления.

Я нашел несколько примеров кода (в основном для генерации звука).волны), и все они объединяют так много вещей в одну строку кода, что я не могу легко разобрать его.Кто-нибудь может просто объяснить, что я должен делать?

Ответы [ 3 ]

2 голосов
/ 20 декабря 2010

sin (и cos) принимают параметр в радианах. Имя counter предполагает, что вы не используете радианы.

Итак, вам нужно определить, сколько колебаний в секунду вы хотите. Затем вы можете измерить время между последним и текущим кадром анимации. Целая волна - 2PI радиан, поэтому

Y = sin(2PI * Time * OccilationsPerSecond) * Amplitude. 
1 голос
/ 20 декабря 2010

Вам нужна формула, подобная этой:

x(t) = (x_max) sin(2*pi*frequency*t)

где

pi = 3.14159....
frequency = 1/period
t = time
x_max = maximum amplitude in the x-direction

Если вы хотите колебания в направлении y, вам нужна другая функция.

0 голосов
/ 20 декабря 2010

Пока вы не получите ответ, вы можете просто сократить период, с которым вы вызываете таймер, если он слишком быстрый.(Тем не менее, вы также можете установить продолжительность для CABasicAnimation - возможно, гораздо лучший подход, поскольку iOS обрабатывает анимацию для вас, может автоматически вернуться к начальным настройкам, может быть установлен в loop 'nраз и т. д.)

Тем не менее, надеюсь, кто-то другой предоставит то, что вы ищете.

...