Главная » iPhone » Изменения ориентации iPhone

0

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

Считывание ориентации

Ориентация (orientation) iPhone может быть считана с помощью статического метода deviceOrientation, находящегося В классе UlHardware: int orientation = [ UlHardware deviceOrientation: YES ];

Этот метод возвращает одну из шести различных возможных ориентации (табл. 7.4), указывая то, как держат iPhone в настоящее время.

Таблица 7.4

Ориентация

Описание

0

kOrientationFlatUp — устройство лежит на плоской поверхности лицевой стороной вверх

1

kOrientationVertical — устройство держат вертикально правой стороной вверх

2

kOrientationVerticalUpsideDown — устройство держат вертикально вверх дном

3

kOrientationHorizontalLeft — устройство наклонено влево

4

kOrientationHorizontalRight —устройство наклонено право

5

kOrientationUnknown — положение устройства неизвестно, сбой сенсора

6

kOrientationFlatDown — устройство лежит на плоской поверхности лицевой стороной вниз

Сенсор может быть считан в начале запуска приложения, но полезнее знать, когда ориентация поменяется. Изменение в ориентации сообщается автоматически в класс UIApplication, от которого порождено ваше приложение GUI. Для перехвата этого события может быть подменен метод

deviceOrientationChanged:

- (void)deviceOrientationChanged:(GSEvent *)event {

int newOrientation = [ UlHardware deviceOrientation: YES ]; /* Ориентация изменилась, сделайте что-нибудь */

Например, если возвращенное значение соотносится с альбомным режимом

(kOrientationHorizontalLeft ИЛИ kOrientationHorizontalRight), ТО приложение может предпринять соответствующие шаги для переключения в альбомный режим. Один из способов сделать это — создать классы uiview для обслуживания книжного или альбомного видов по отдельности. Затем при изменении ориентации эти два вида могут переходить вперед и назад: [ transitionView transition: О

fromView: portraitView toView: landscapeView

];

Вращающиеся объекты

Базовый класс uiview поддерживает метод setRotationBy, который позволяет практически любому отображаемому объекту в UIKit вращаться, чтобы приспосабливаться к различным ориентациям:

[ textView setRotationBy: 90 ];

Передаваемый аргумент определяет угол в градусах, на который нужно повернуть объект.

Для того чтобы прийти в соответствие с ориентацией iPlione, вращаться нужно не только различным объектам, строка состояния также может вращаться. Воспользуйтесь методом setstatusBarMode, который обсуждался в главе 3:

[ self setstatusBarMode: 0 orientation: 90 duration: 0 fencelD: nil animation: 0 ];

В зависимости от того, были ли объекты повернуты для приспособления к левому или к правому повороту iPhone, укажите либо 90°, либо -90° соответственно.

Размеры окна объектов будут изменены, чтобы соответствовать ориентации этих объектов, поэтому начальная точка объектов также будет смещена. Например, чтобы отобразить текстовый вид в альбомном режиме, воспользуйтесь фреймом, задаваемым в альбомном разрешении:

CGRect textRect = CGRectMake(-90, 70, 480, 300); textView = [ [ UITextView alloc ] initWithFrame: textRect ]; [ textView setRotationBy: 90 }; [ self addSubview: textView ];

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

По теме:

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