【发布时间】:2012-02-27 13:15:12
【问题描述】:
所以我决定尝试使用 StoryBoarding 构建一个 iPhone 应用程序。 而且我设置了一个基本的基于选项卡的应用程序,速度非常快。
TabBar 控制器作为具有两个选项卡的初始视图控制器。 在每个选项卡上,附加了更多视图作为内容。
在一个选项卡上,我有导航控制器,后面有几个视图。 在这里我没有问题。我可以使用自定义按钮和导航栏来回移动。 此外,在视图的所有移动过程中,TabBar 始终处于其位置。
然后我得到了第二个标签。 这里没有导航控制器, 因为,在第二个选项卡上,我需要使用自定义序列来创建视图之间的自定义过渡动画。到目前为止,序列、动画和过渡都没有问题(至少我几乎得到了我需要的动画:))。 但我被卡住的是那个 TabBar。 只要我按下任何将使用自定义序列导航到另一个视图的按钮,我就会丢失我的 TabBar。即使我导航回初始视图,也不再有 TabBar。
我已经阅读了一些关于在视图堆栈中弹出标签栏控制器的内容,但是我能找到的所有示例都对我不起作用。
如果有人遇到类似问题,请分享解决方案。任何指向一些好的教程或示例的人都将非常感激。
编辑: 所以我的自定义序列看起来像这样:
我的“(void)perform”看起来像这样: (至少它按预期从源到目标动画。唯一的错误是 TabBar 被隐藏或关闭)
#import "XCustomSeque.h"
#import <QuartzCore/QuartzCore.h>
@implementation XCustomSeque
@synthesize appDelegate=_appDelegate;
-(void) perform{
UIViewController *srcViewController = (UIViewController *) self.sourceViewController;
UIViewController *destViewController = (UIViewController *) self.destinationViewController;
self.appDelegate = [[UIApplication sharedApplication] delegate];
CATransition* trans = [CATransition animation];
[trans setType:kCATransitionMoveIn];
[trans setFillMode:kCAFillModeBoth];
[trans setDuration:1];
[trans setSubtype:kCATransitionFromLeft];
CALayer *layer = destViewController.view.layer;
[srcViewController.view removeFromSuperview];
[self.appDelegate.window addSubview:destViewController.view];
[layer addAnimation:trans forKey:nil];
self.appDelegate.window.rootViewController=destViewController;
}
@end
【问题讨论】:
-
在第二个选项卡中,我认为您使用的是“模态”segue(不是 seque)。这意味着您正在现有视图层次结构(包括选项卡栏)上打开模态全屏视图,并且当您“导航回来”(我认为您已经创建了另一个模态 segue)时,您打开了另一个模态全屏视图。 “导航回来”的正确方法是调用 [self dismissModalViewControllerAnimated:YES]。
-
不,它不是第二个选项卡中的“模态”序列。使用 Modal,无法将自定义序列与自定义动画一起使用。
-
好吧,我尝试了各种不同的序列类型。 1) 推送 2) 模态 3) 自定义 |唯一不隐藏 TabBar 的是第一个 - Push。这个序列的不好的一面是它不可能(我没有找到任何方法来做到这一点)在这里应用任何自定义动画进行转换。所以推送是完全不可能的。
标签: iphone ios5 storyboard uitabbar