Как управлять поворотом пользовательского интерфейса в Marmalade

Я хочу знать, как обрабатывать поворот пользовательского интерфейса. У меня есть требование изменить макет моего пользовательского интерфейса, когда пользователь поворачивает пользовательский интерфейс с портретного на альбомный или наоборот. Дайте мне знать, какое событие мне нужно обработать и как мне получить высоту и ширину устройства для обоих видов поворота и настроить мой пользовательский интерфейс.

Меня также интересует, что если я использую другой макет, он будет автоматически корректироваться при повороте пользовательского интерфейса. Типичный случай: скажем, я создал пользовательский интерфейс с использованием макетов, которые отображают два компонента на главном экране, левый список и правый контент определенного элемента списка (это то же самое, что и проводник в окнах). В этом случае, если я поверну свой пользовательский интерфейс, будет ли он правильно настроен или мне нужно будет обрабатывать его явно.

Пожалуйста, поделитесь своим мнением об этом как можно скорее.

Заранее большое спасибо за вашу поддержку.

С уважением, Премал Панчал.


person Premal    schedule 16.03.2012    source источник


Ответы (2)


Marmalade автоматически обрабатывает Portrait в Landscape и наоборот, поэтому вам не нужно кодировать его.

person noob    schedule 06.04.2012

Зарегистрируйтесь для обратного вызова S3E_SURFACE_SCREENSIZE, после чего вы сможете получать уведомления об изменении размера/ориентации экрана:

s3eSurfaceRegister( S3E_SURFACE_SCREENSIZE, (s3eCallback)ScreenSizeOrientationChanged );


void ScreenSizeOrientationChanged( s3eSurfaceOrientation *orien, void *pUserData )
{
    s3eDebugTracePrintf( "Orientation Changed: width=%d, height=%d, surfacewidth=%d, surfaceheight=%d, blitdirection=%s", orien->m_Width, orien->m_Height, Iw2DGetSurfaceWidth(), Iw2DGetSurfaceHeight(), S3E_SURFACE_BLIT_DIR_ROT180 ? "180" : "0" );

    CGame *pGame = (CGame *)pUserData;
    if( pGame )
    {
        pGame->ReCalculateScreenSize( orien->m_Width, orien->m_Height );
    }
}

s3eSurfaceUnRegister( S3E_SURFACE_SCREENSIZE, (s3eCallback)ScreenSizeOrientationChanged );

Вы заметите, что методы GetSurfaceWidth/Height по-прежнему сообщают исходные значения ориентации, поэтому используйте значения, переданные в структуре s3eSurfaceOrientation.

person Dan    schedule 30.11.2012