Главная » iPhone » Пример iPhone: поворот мира в другую сторону

0

В главе 3 одним из самых первых приведенных нами примеров было приложение "Hello, World!" Мы воспользуемся этим простым примером для демонстрации простейшего альбомного поворота экрана. Приведенный далее код выводит на экран приложение "Hello, World!", используя строку состояния альбомного режима и поворачивая текстовое поле в соответствии с ним.

Чтобы скомпилировать этот пример из командной строки, воспользуйтесь пакетом инструментов следующим образом:

$ arm-apple-darwin9-gcc -о MyExample MyExample.m -lobjc —framework CoreFoundation -framework UIKit

Листинги 7.25 и 7.26 содержат соответствующий код.

#import <CoreFoundation/CoreFoundation.h> #import <UIKit/UIKit.h> #import <UIKit/UITextView.h>

@interface MainView : Uiview {

UiTextview *textView; CGRect rect;

}

-   (id)initwithFrame:(CGRect)_rect;

-   (void)dealloc; @end

@interface MyApp : UIApplication {

UlWindow *window; MainView *mainView;

}

-   (void)applicationDidFinishLaunching:(NSNotification *)aNotification; @end

#import "MyExample.h"

int main(int argc, char **argv) {

return UIApplicationMain(argc, argv, ©"MyApp", ©"MyApp");

}

©implementation MyApp

-    (void)applicationDidFinishLaunching:(NSNotification *)aNotification { window = [ [ UlWindow alloc ] initWithContentRect:

[ UIHardware fullScreenApplicationContentRect ]

];

CGRect rect = [ UIHardware fullScreenApplicationContentRect ] ; rect.origin.x = rect.origin.у = O.Of;

mainView = [ [ MainView alloc ] initWithFrame: rect ]; [ self setStatusBarMode: 0 orientation: 90 duration: 0 ];

[ window setContentView: mainView ]; [ window orderFront: self J; [ window makeKey: self ]; [ window _setHidden: NO J;

}

©end

©implementation MainView

-    (id)initWithFrame:(CGRect)_rect {

self = [ super initWithFrame: _rect ]; if (nil != self) { rect = rect;

CGRect textRect = CGRectMake(-90, 70, 480, 300);

textView = [ [ UITextView alloc ] initwithFrame: textRect ];

[ textView setRotationBy: 90 ];

[ textView setText: @"Hello, World!" ];

[ self addSubview: textView ];

}

return self;

}

- (void)dealloc {

[ self dealloc ]; [ super dealloc ];

}

@end

Как это работает

1.     При порождении приложения создается объект MainView и вызывается его метод initwithFrame.

2.     Основной вид создает класс UITextView с разрешением 480×300 для альбомного режима.

3.      Вызывается метод setRotationBy текстового вида для поворота объекта на 90° по часовой стрелке. Затем он добавляется на экран.

Считывание акселерометра

API ориентации получает всю информацию от небольшого акселерометра, встроенного в iPhone. Эта крошечная часть аппаратного обеспечения сообщает координаты X, Y, Z положения устройства. API ориентации существенно упрощает такую выходную информацию и переводит ее в положения, удобные для использования и понимания, однако более смелые разработчики могут считывать необработанные данные напрямую.

Эрлинг Эплингсен (Erling Ellingsen) потратил огромное количество времени на разборку процедур, которые взаимодействуют с акселерометром, и неожиданно обнаружил, что основной класс приложения, UIApplication, отправляет частые уведомления о состоянии акселерометра. Для перехвата этих уведомлений подмените метод acceleratedinx:

- (void)acceleratedinx:(float)xAxis У:(float)yAxis Z:(float)zAxis { /* Акселерометр как X-Axis, Y-Axis и Z-Axis */

}

Поскольку акселерометр iPhone не включает в себя гироскоп, то он не может предоставлять информацию о скорости или столько информации о состоянии устройства, сколько может предоставлять, к примеру, контроллер Nintendo Wii. Однако он доказал свою полезность для простых приложений, например, тех, которые используют распознавание дрожания iPhone.

Для дальнейшего изучения

Проверьте наличие прототипов UIView-Geometry.h в каталоге include пакета инструментов. Их можно найти в папке /toolchain/sys/include/UIKit.

Источник: Здзиарски Дж. iPhone. Разработка приложений с открытым кодом: Пер„с англ. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2009. — 368 е.: ил.

По теме:

  • Комментарии