Преобразование постоянно меняющегося скалярного значения в изменяющийся интервал или частоту
Хотя я и пишу код в Objective C, это скорее вопрос программирования.
Каков наилучший способ преобразования постоянно меняющегося скалярного значения в изменяющийся интервал или частоту?
Прямо сейчас каждый раз, когда меняется скалярное значение, я уничтожаю NSInterval
т.е.
[self.myTimer invalidate];
self.myTimer = nil;
и создание нового, но это кажется ОЧЕНЬ дорогим способом достижения моей цели, поскольку меняющееся скалярное значение в моем случае представляет собой горизонтальную скорость пролистывания.
Для грубой аналогии представьте, как скорость свипа отражается в визуальном метрономе: чем быстрее вы проводите, тем выше (короче интервал) частота метронома.
1 ответ
Во-первых, поймите, что это проблема "измерения". Чтобы решить эту проблему, выделите минимальные атрибуты, необходимые для решения проблемы, и выведите остальные.
Перемещенное расстояние и время, необходимое для перемещения, являются производными атрибутами каждого измерения, в этом случае измерение называется "смахивание". В гоночной аналогии измерение называется кругом. "Скорость" теперь может быть рассчитана. Это будет "скорость", то есть просто расстояние / время.
distance
могут быть рассчитаны с учетом начальной и конечной точек удара. Чтобы получить значение времени, создайте startTime
экземпляр NSDate
в touchesBegan:withEvents:
И в touchesEnded:withEvents:
подсчитывать elapsedTimeInterval
с помощью [startTime timeIntervalSinceNow];
В зависимости от ваших потребностей, вам может понадобиться Measurement
класс со свойствами для startPosition, endPosition, startTime и endTime, чтобы вы могли отслеживать "самую быструю" скорость и т. д.
Взгляните на паттерны анализа Мартина Фаулера. Я нахожу это очень полезным при попытке сопоставить проблемы домена с программными решениями.