Titanium如何将一个窗口推到另一个具有推视控制器效果的窗口(如iphone中的动画)

时间:2013-06-07 07:01:11

标签: titanium titanium-mobile

我是钛的新手。有没有人知道如何将一个窗口推到另一个具有推视图控制器效果的窗口(如iphone中的动画)。因为在文档中大多数是模态演示。是否像iphone一样推送视图?谢谢。

1 个答案:

答案 0 :(得分:2)

我们一直在使用动画在Android上滑动窗口,模拟iOS功能。我们最终制作了自己的窗口管理器来管理差异,但我已经提取了相关的动画代码。

我们在iOS上的导航组中使用Windows,并在Android上的单个窗口中查看。

我们有一个名为vwBody的客户区的单一视图,您将在此处参考。这是我们编写的导航标题下的客户区。如果您没有模拟整个导航组功能,那么这可能只是主窗口。

在任何情况下,我们组成的传入视图只显示客户区右侧的一个像素:

// vwBody is preexisting view defining the client area

var newview = Ti.UI.createView( {
    name: name,
    left: vwBody.size.width - 1,
    top: 0,
    width: vwBody.size.width,
    height: vwBody.size.height } );

// compose the view here

vwBody.add(newView);
newView.addEventListener('postlayout', waitForWindowPaint);

这允许视图正确合成,因为在视图在屏幕上之前,Android / Ti实际上不会开始绘制。我们在继续动画之前等待postlayout事件。合成完成后,我们将视图设置为动画:

function waitForWindowPaint()
{
  newView.animate({ left: 0, duration:300 }, 
    function(){ /* whatever to do post animation */ });

  newView.removeEventListener("postlayout", waitForWindowPaint);
}

视图现已准备好进行用户交互。

当我们关闭视图时,我们会将其设置为动画:

newView.animate({ left: curWin.size.width, opacity: 0, duration:300 },
   function(){ vwBody.remove(newView); });

我们将android:back和header back按钮挂钩以关闭视图。