一个scene是UI跳转的基本单元,包括一个form和一个panel,或只有一个form。
1. functions
1)管理form的生命周期,管理forms或者panels的跳转;
2)管理scene的变换;
3)为forms或panels的跳转增加动画。
2. 注册所有的scenes
1)实现 Tizen::Ui::Scenes::IFormFactory和 Tizen::Ui::Scenes::IPanelFactory,并为forms和panels指定特定的ID;
class MyFormFactory:
public Tizen::Ui::Scenes::IFormFactory
class MyPanelFactory:
public Tizen::Ui::Scenes::IPanelFactory
static MyFormFactory myFormFactory;
myFormFactory.Construct();
static MyPanelFactory myPanelFactory;
myPanelFactory.Construct();
static MyPolicyProvider myPolicyProvider;
pSceneManager->RegisterFormFactory(myFormFactory);
pSceneManager->RegisterPanelFactory(myPanelFactory);
2)在OnAppInitializing中使用RegisterScene注册所有的scenes。
SceneManager* pSceneManager = SceneManager::GetInstance();
pSceneManager->RegisterScene(L"InitialScene", L"InitialForm", L"");
pSceneManager->RegisterScene(L"MainContactsListScene", L"MainForm", L"ContactsListPanel");
pSceneManager->RegisterScene(L"MainGroupsListScene", L"MainForm", L"GroupsPanel");
pSceneManager->RegisterScene(L"MainFavouritesListScene", L"MainForm", L"FavouritesListPanel");
pSceneManager->RegisterScene(L"DetailScene", L"DetailForm", L"");
3. Scene历史和生命周期
1)General Forward and Backward Transitions
SCENE_HISTORY_OPTION_ADD_HISTORY 保证当前的scene能进入scene历史。
2)Forward Transition with Transition Options
SCENE_DESTROY_OPTION_KEEP 保证当前的scene alive,除非被显示的destroy掉,
SCENE_HISTORY_OPTION_NO_HISTORY and SCENE_DESTROY_OPTION_DESTROY 可以保证当前的scene不进入scene历史。
3)Backward Transition to an Adjacent or Non-adjacent Scene
为GoBackward指定ID可以跳转回指定的scene,他们之间的scene会被释放掉。
4)Tab-style Panel Transitions
5)可以通过GetHistoryN() 和 AddToHistory() 来备份存储应用的scene 历史,这对于重新launch应用时有用。
6)可以实现Tizen::Ui::Scenes::ISceneManagerEventListener 并使用scene manager注册;每个scene也可以通过实现Tizen::Ui::Scenes::ISceneEventListener来接收scene 转换的事件,这个监听只能用在当前要创建的scene上。
OnSceneDeactivated() 和 OnSceneActivatedN()在scene转换过程中被调用;
7)使用 Tizen::Ui::Scenes::ISceneTransitionPolicyProvider 来manage predefined UI scene switching scenarios。
class MyPolicyProvider:
public Tizen::Ui::Scenes::ISceneTransitionPolicyProvider
Tizen::Base::String
MyPolicyProvider::GetNextScene(const Tizen::Base::String& currentSceneId, const Tizen::Base::Collection::IList* pArgs)
{
String nextSceneId(L"");
if (currentSceneId == L"InitialScene")
nextSceneId = L"MainContactsListScene";
return nextSceneId;
}
void
MainForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
{
result r = E_SUCCESS;
SceneManager* pSceneManager = SceneManager::GetInstance();
switch (actionId)
{
case ID_BUTTON_1:
r = pSceneManager->GoForward(ForwardSceneTransition(SCENE_TRANSITION_ANIMATION_TYPE_NONE,
SCENE_HISTORY_OPTION_NO_HISTORY));
break;
default:
break;
}
}