Принципы разработки ПО для iphone с использованием...
DESCRIPTION
TRANSCRIPT
Краковецкий Александр
MCP, Разработчик программного обеспеченияИВП «ИнноВинн», Украина
[email protected]://iphoner.org.ua/blogs/akrakovetsky
Что такое акселерометр и как он работает?
Примеры использования
Работа с координатами
Подключение акселерометра в проект
Программы AccelerometerGraph и iBells
Использование акселерометр в веб-приложениях
Акселерометр и симулятор
Вопросы и ответы
“Акселерометр — прибор, измеряющий проекцию кажущегося ускорения, что есть равнодействующая сил не гравитационной природы, действующая на массу и отнесѐнная к величине этой массы.”
Википедия
Общий пример
iBeer
iBoobs
Датчик ускорения внутри iPhoneиспользует три элемента: кремниевое тело, набор кремниевых пружин и электрический ток. Кремниевые пружины определяют положение кремниевого тела с помощью электрического тока. При повороте iPhone возникает колебание электрического тока, проходящего по кремниевым пружинам. Датчик ускорения фиксирует эти колебания и сообщает iPhone.
является частью UIKit фреймворка
предоставляет информацию по трем осям
можно настроить частоту обновления данных (приблизительно 10-100 Гц)
Классы:
UIAccelerometer
UIAcceleration
Протокол:
UIAccelerometerDelegate
координата X (Roll) показывает информацию о повороте устройства влево или вправо;
координата Y (Pitch) дает нам следующую информацию: iPhoneнаходится в вертикальном положении (-1), лежит в горизонтальной плоскости (0) или находится в вертикальном положении, только вверх ногами (+1);
координата Y (Faceup/face down) показывает, в каком положении находится устройство: лицом вверх (-1, при нулевых значениях по другим осям), в вертикальном положении (0) или лицом вниз (+1).
В методе applicationDidFinishLaunching:
#define kUpdateFrequency 60.0
[[UIAccelerometer sharedAccelerometer]
setUpdateInterval: 1.0/ kUpdateFrequency];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
В заголовочном файле вместо
@interface AppDelegate :
NSObject<UIApplicationDelegate>
нужно написать:
@interface AppDelegate : NSObject<UIApplicationDelegate, UIAccelerometerDelegate>
Логику обработки данных акселерометра нужно добавить в метод didAccelerate в классе делегата:
— (void)accelerometer:(UIAccelerometer *) accelerometer didAccelerate:(UIAcceleration *) acceleration
{
// Get the event dataUIAccelerometValue x, y, z;
x = acceleration.x;y = acceleration.y;z = acceleration.z;
}
Можно объявлять лишь один делегат для одного приложения
Данные приходят асинхронно к основному потоку
Диапазон частоты - 10 -100 Гц
Рекомендуемая частота для игр: 30-60 Гц, для определения ориентации - 10-30 Гц
- (void) disableAccelerometerEvents
{
UIAccelerometer * acc =
[UIAccelerometer sharedAccelerometer];
acc.delegate = nil;}
float angle = atan2(Y, X);
if(angle >= -2.25 && angle <= -0.75){
if(deviceOrientation != UIInterfaceOrientationPortrait){
deviceOrientation = UIInterfaceOrientationPortrait;
[interfaceOrientationLabel
setText:@"UIInterfaceOrientationPortrait"];}
}
else if(angle >= -0.75 && angle <= 0.75)
{
// code here
}
Высокочастотный фильтр (high-pass filer):
#define FILTERFACTOR 0.1
value = newAcceleration - (newAcceleration * FILTERFACTOR) + + (previousValue * (1.0 - FILTERFACTOR));
previousValue = value;
Низкочастотный фильтр (low-pass filter):
#define FILTERFACTOR 0.1
value = (newAcceleration * FILTERFACTOR) +
+ (previousValue * (1.0 - FILTERFACTOR));
previousValue = value;
Программа для исследования работы акселерометра и визуализации собираемых устройством данных.
Содержит реализации высоко- и низкочастотных фильтров.
iBells – это развлекательная программа, которая реагирует на действия пользователя и проигрывает звуки колокольчиков.
Задачи:
корректное реагирование на действия пользователей, т.е. именно в тот момент когда пользователь трясет устройство;
реализация минимальной задержки, в течении которой музыкальный файл не должен проигрываться (это нужно для того, чтобы исключить очень частые срабатывания);
Проверка на минимальный пик, на который нужно реагировать.
В iPhone Safari был добавлен новый метод onorientationchange, который срабатывает при изменении положения на 90%.
Ниже приведен javascript код, с помощью которого можно реагировать на изменение положения (orientation) веб-страницы.
function updateOrientation() {
var orientation = window.orientation;
switch(orientation)
{
case 0:
document.getElementById("currentOrientation").innerHTML = ―portrait"; break;
case 90:
document.getElementById("currentOrientation").innerHTML = ―left"; break;
case -90:
document.getElementById("currentOrientation").innerHTML = ―right"; break;
}
}
window.onorientationchange = updateOrientation;
<div id="currentOrientation" style="font-size: 40px;">Portrait</div>
Эмулятор не поддерживает акселерометр, т.е. тестировать приложения с его использованием необходимо на реальном устройстве.
iPhone Technology http://www.apple.com/iphone/iphone-3gs/high-technology.html
UIAcceleration Class Reference http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIAcceleration_Class/index.html
Stanford iPhone Application Programming – 15. iPhone Device APIs Location, Accelerometer & Camera, Battery Life & Power
iPhoner http://iphoner.org.ua/