| 528 | } |
| 529 | |
| 530 | void CANavigationController::replaceViewController(CrossApp::CAViewController *viewController, bool animated) |
| 531 | { |
| 532 | if (this->getView()->getSuperview() == NULL) |
| 533 | { |
| 534 | return; |
| 535 | } |
| 536 | |
| 537 | if (m_pNavigationBars.size() == 1) |
| 538 | { |
| 539 | CANavigationBarItem* item = viewController->getNavigationBarItem(); |
| 540 | if (item == NULL) |
| 541 | { |
| 542 | item = CANavigationBarItem::create(""); |
| 543 | } |
| 544 | item->setShowGoBackButton(false); |
| 545 | viewController->setNavigationBarItem(item); |
| 546 | } |
| 547 | |
| 548 | float x = this->getView()->getBounds().size.width; |
| 549 | |
| 550 | CAView* lastContainer = m_pContainers.back(); |
| 551 | this->createWithContainer(viewController, DLayout(DHorizontalLayout_L_R(x, -x), DVerticalLayoutFill)); |
| 552 | CAView* newContainer = m_pContainers.back(); |
| 553 | |
| 554 | CAApplication::getApplication()->getTouchDispatcher()->setDispatchEventsFalse(); |
| 555 | |
| 556 | if (animated) |
| 557 | { |
| 558 | CAViewAnimation::beginAnimations("", NULL); |
| 559 | CAViewAnimation::setAnimationDuration(0.25f); |
| 560 | CAViewAnimation::setAnimationDelay(1/30.0f); |
| 561 | CAViewAnimation::setAnimationCurve(CAViewAnimationCurveEaseOut); |
| 562 | lastContainer->setFrameOrigin(DPoint(-x/3.0f, 0)); |
| 563 | CAViewAnimation::commitAnimations(); |
| 564 | |
| 565 | CAViewAnimation::beginAnimations("", NULL); |
| 566 | CAViewAnimation::setAnimationDuration(0.25f); |
| 567 | CAViewAnimation::setAnimationDelay(1/60.0f); |
| 568 | CAViewAnimation::setAnimationCurve(CAViewAnimationCurveEaseOut); |
| 569 | CAViewAnimation::setAnimationDidStopSelector(this, CAViewAnimation0_selector(CANavigationController::replaceViewControllerFinish)); |
| 570 | newContainer->setFrameOrigin(DPointZero); |
| 571 | CAViewAnimation::commitAnimations(); |
| 572 | } |
| 573 | else |
| 574 | { |
| 575 | this->replaceViewControllerFinish(); |
| 576 | } |
| 577 | } |
| 578 | |
| 579 | void CANavigationController::replaceViewControllerFinish() |
| 580 | { |