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

28
Краковецкий Александр MCP, Разработчик программного обеспечения ИВП «ИнноВинн», Украина [email protected] http://iphoner.org.ua/blogs/akrakovetsky

Upload: andrew-yaroshevsky

Post on 25-Jan-2015

1.468 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Принципы разработки ПО для iPhone с использованием акселерометра

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

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

[email protected]://iphoner.org.ua/blogs/akrakovetsky

Page 2: Принципы разработки ПО для iPhone с использованием акселерометра

Что такое акселерометр и как он работает?

Примеры использования

Работа с координатами

Подключение акселерометра в проект

Программы AccelerometerGraph и iBells

Использование акселерометр в веб-приложениях

Акселерометр и симулятор

Вопросы и ответы

Page 3: Принципы разработки ПО для iPhone с использованием акселерометра

“Акселерометр — прибор, измеряющий проекцию кажущегося ускорения, что есть равнодействующая сил не гравитационной природы, действующая на массу и отнесѐнная к величине этой массы.”

Википедия

Page 4: Принципы разработки ПО для iPhone с использованием акселерометра

Общий пример

iBeer

iBoobs

Page 5: Принципы разработки ПО для iPhone с использованием акселерометра
Page 6: Принципы разработки ПО для iPhone с использованием акселерометра

Датчик ускорения внутри iPhoneиспользует три элемента: кремниевое тело, набор кремниевых пружин и электрический ток. Кремниевые пружины определяют положение кремниевого тела с помощью электрического тока. При повороте iPhone возникает колебание электрического тока, проходящего по кремниевым пружинам. Датчик ускорения фиксирует эти колебания и сообщает iPhone.

Page 7: Принципы разработки ПО для iPhone с использованием акселерометра

является частью UIKit фреймворка

предоставляет информацию по трем осям

можно настроить частоту обновления данных (приблизительно 10-100 Гц)

Классы:

UIAccelerometer

UIAcceleration

Протокол:

UIAccelerometerDelegate

Page 8: Принципы разработки ПО для iPhone с использованием акселерометра

координата X (Roll) показывает информацию о повороте устройства влево или вправо;

координата Y (Pitch) дает нам следующую информацию: iPhoneнаходится в вертикальном положении (-1), лежит в горизонтальной плоскости (0) или находится в вертикальном положении, только вверх ногами (+1);

Page 9: Принципы разработки ПО для iPhone с использованием акселерометра

координата Y (Faceup/face down) показывает, в каком положении находится устройство: лицом вверх (-1, при нулевых значениях по другим осям), в вертикальном положении (0) или лицом вниз (+1).

Page 10: Принципы разработки ПО для iPhone с использованием акселерометра
Page 11: Принципы разработки ПО для iPhone с использованием акселерометра

В методе applicationDidFinishLaunching:

#define kUpdateFrequency 60.0

[[UIAccelerometer sharedAccelerometer]

setUpdateInterval: 1.0/ kUpdateFrequency];

[[UIAccelerometer sharedAccelerometer] setDelegate:self];

Page 12: Принципы разработки ПО для iPhone с использованием акселерометра

В заголовочном файле вместо

@interface AppDelegate :

NSObject<UIApplicationDelegate>

нужно написать:

@interface AppDelegate : NSObject<UIApplicationDelegate, UIAccelerometerDelegate>

Page 13: Принципы разработки ПО для iPhone с использованием акселерометра

Логику обработки данных акселерометра нужно добавить в метод didAccelerate в классе делегата:

— (void)accelerometer:(UIAccelerometer *) accelerometer didAccelerate:(UIAcceleration *) acceleration

{

// Get the event dataUIAccelerometValue x, y, z;

x = acceleration.x;y = acceleration.y;z = acceleration.z;

}

Page 14: Принципы разработки ПО для iPhone с использованием акселерометра

Можно объявлять лишь один делегат для одного приложения

Данные приходят асинхронно к основному потоку

Диапазон частоты - 10 -100 Гц

Рекомендуемая частота для игр: 30-60 Гц, для определения ориентации - 10-30 Гц

Page 15: Принципы разработки ПО для iPhone с использованием акселерометра

- (void) disableAccelerometerEvents

{

UIAccelerometer * acc =

[UIAccelerometer sharedAccelerometer];

acc.delegate = nil;}

Page 16: Принципы разработки ПО для iPhone с использованием акселерометра

float angle = atan2(Y, X);

Page 17: Принципы разработки ПО для iPhone с использованием акселерометра

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

}

Page 18: Принципы разработки ПО для iPhone с использованием акселерометра

Высокочастотный фильтр (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;

Page 19: Принципы разработки ПО для iPhone с использованием акселерометра
Page 20: Принципы разработки ПО для iPhone с использованием акселерометра

Программа для исследования работы акселерометра и визуализации собираемых устройством данных.

Содержит реализации высоко- и низкочастотных фильтров.

Page 21: Принципы разработки ПО для iPhone с использованием акселерометра

iBells – это развлекательная программа, которая реагирует на действия пользователя и проигрывает звуки колокольчиков.

Задачи:

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

реализация минимальной задержки, в течении которой музыкальный файл не должен проигрываться (это нужно для того, чтобы исключить очень частые срабатывания);

Проверка на минимальный пик, на который нужно реагировать.

Page 22: Принципы разработки ПО для iPhone с использованием акселерометра
Page 23: Принципы разработки ПО для iPhone с использованием акселерометра

В iPhone Safari был добавлен новый метод onorientationchange, который срабатывает при изменении положения на 90%.

Ниже приведен javascript код, с помощью которого можно реагировать на изменение положения (orientation) веб-страницы.

Page 24: Принципы разработки ПО для iPhone с использованием акселерометра

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>

Page 25: Принципы разработки ПО для iPhone с использованием акселерометра
Page 26: Принципы разработки ПО для iPhone с использованием акселерометра

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