Принципы разработки ПО для iphone с использованием...

Post on 25-Jan-2015

1.468 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Краковецкий Александр

MCP, Разработчик программного обеспеченияИВП «ИнноВинн», Украина

Alex.Krakovetskiy@innovinn.comhttp://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>

Эмулятор не поддерживает акселерометр, т.е. тестировать приложения с его использованием необходимо на реальном устройстве.

Alex.Krakovetskiy@gmail.com

top related