gpt4 book ai didi

iphone - 使用自定义转场转换时 TabBar 会丢失。如何取回?

转载 作者:行者123 更新时间:2023-12-03 21:17:45 26 4
gpt4 key购买 nike

所以我决定尝试使用 StoryBoarding 构建一个 iPhone 应用程序。我很快就设置了一个基本的基于选项卡的应用程序。

TabBar Controller 作为带有两个选项卡的初始 View Controller 。在每个选项卡上,还有一些作为内容附加的 View 。

在一个选项卡上,我有一个导航 Controller ,下面有几个 View 。我在这里没有问题。我可以使用自定义按钮和导航栏来回移动。此外,在 View 中的所有移动过程中,TabBar 始终位于其位置。

然后我得到了第二个选项卡。这里没有导航 Controller ,因为,在第二个选项卡上,我需要使用自定义序列来创建 View 之间的自定义过渡动画。到目前为止,序列、动画和过渡没有问题(至少我几乎得到了我需要的动画:))。但我陷入困境的是 TabBar。一旦我按下任何将使用自定义序列导航到另一个 View 的按钮,我就会丢失我的 TabBar。即使我导航回初始 View ,也不再有 TabBar。

我读过一些有关在 View 堆栈中弹出选项卡栏 Controller 的内容,但我能找到的所有示例都不适合我。

如果有人遇到类似的问题,请分享解决方案。任何指向一些好的教程或示例的人都将非常感激。

编辑:所以我的自定义序列如下所示:

我的“(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

最佳答案

在第二个选项卡中,您还需要使用导航 Controller ,但要关闭“显示导航栏”。您的 Storyboard如下所示。

        +-> [NavC-1] --> [VC-1-1] --(push)-> [VC-1-2] ...
| (shows nav bar)
[TabC] -+
|
+-> [NavC-2] --> [VC-2-1] --(custom)-> [VC-2-2]
(hides nav bar)

当您从 VC-2-1 导航到 VC-2-2 时,您可以使用自定义 Segue(UIStoryboardSegue 的子类),以及如下所示的 -perform 方法。(参见How to create custom modal segue in 4.2 Xcode using storyboard)

- (void)perform
{
UIViewController *src = self.sourceViewController;
UIViewController *dst = self.destinationViewController;
[UIView transitionWithView:src.navigationController.view duration:0.2
options:UIViewAnimationOptionTransitionFlipFromLeft
animations:^{
[src.navigationController pushViewController:dst animated:NO];
}
completion:NULL];
}

当您从 VC-2-2 导航回 VC-2-1 时,您不想使用 segue,因为它会创建 VC-2-1 的新副本。相反,您可以使用如下所示的操作方法(按下后退按钮时调用)。

- (IBAction)goBack:(id)sender
{
[UIView transitionWithView:self.navigationController.view duration:0.2
options:UIViewAnimationOptionTransitionFlipFromRight
animations:^{
[self.navigationController popViewControllerAnimated:NO];
}
completion:NULL];
}

关于iphone - 使用自定义转场转换时 TabBar 会丢失。如何取回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9153746/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com