Как легко передать значение от чтения децибел до динамической стрелки - PullRequest
2 голосов
/ 19 января 2012

Просто интересно, как легко сделать что-то подобное в Iphone.

Понравится, как заставить иглу двигаться

Спасибо за чтение и комментарии

enter image description here

Ответы [ 3 ]

2 голосов
/ 19 января 2012

Вы должны быть в состоянии положить иглу в UIImageView.Каждое представление теперь имеет ассоциированное преобразование, это в основном матрица, которая решает, как исходные точки отображаются на экране.Есть довольно простые способы сделать простую манипуляцию этим:

UILabel *lblTest = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
lblTest.text = @"Testing";
[view addSubview:lblTest];

lblTest.transform = CGAffineTransformMakeRotation(M_PI / 4.0);

приведет к повороту метки на 45 градусов (что составляет четверть PI в радианах; вы можете конвертировать градусы в радианы путем умноженияна M_PI и делится на 180,0).Используя это, у вас уже есть под рукой методы для анимации иглы всякий раз, когда приходит новая точка данных.

Обратите внимание, что это также можно анимировать:

[UIView animateWithDuration:5.0 animations:^{
    lblTest.transform = CGAffineTransformMakeRotation(M_PI_4);
}];

Это будет медленно поворачивать представлениедо 45 градусов в течение 5 секунд.Для анимации есть несколько уроков, например Как использовать анимацию UIView .И каркас уже учитывает некоторые продвинутые вещи, например:

[UIView animateWithDuration:1.0 delay:1.0 options:UIViewAnimationCurveEaseInOut|UIViewAnimationOptionAutoreverse|UIViewAnimationOptionRepeat animations:^{
    lblTest.transform = CGAffineTransformMakeRotation(M_PI_4);
} completion:^(BOOL finished) {        
}];

"сгладит" начало и конец вращения, автоматически обратный ход и повторяет это снова и снова.Это приводит к тому, что метка «шевелится» взад и вперед после ожидания в течение 1 секунды.

Вы можете использовать это для введения некоторых плавных эффектов при переходе между значениями.Если вы, например, делаете выборку данных только каждые 250 мс, вы можете использовать это время для представления анимации.

2 голосов
/ 19 января 2012

Очень просто, если вы знаете, что делаете - примените A-взвешивающий фильтр, RMS, примените временной взвешивающий фильтр, преобразуйте в дБ.Основная проблема - это калибровка микрофона.

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

1 голос
/ 19 января 2012

Зависит от того, сколько у вас опыта в objc :) Но представить аналоговое значение с помощью такого индикатора не так уж сложно.

Эта ссылка , например, должна помочь вам начать ...

...