我有一个使用UITabBarController的应用程序,还有另一个 View 需要从标签栏控件的后面,但在标签栏内容的前面向上滑动。如果不清楚,请想象一个广告在选项卡式应用程序中向上滑动,该应用程序出现在选项卡栏按钮以外的所有内容的前面。

到目前为止,我的代码看起来像这样,但是如果有更好的方法,我愿意更改它...

tabBarController.viewControllers = [NSArray arrayWithObjects:locationNavController, emergencyNavController, finderNavController, newsNavController, nil];

aboutView = [[AboutView alloc] initWithFrame:CGRectMake(0, window.frame.size.height - tabBarController.tabBar.frame.size.height - 37 ,
                                                        320, window.frame.size.height - tabBarController.tabBar.frame.size.height)];


[window addSubview:tabBarController.view];    // adds the tab bar's view property to the window
[window addSubview:aboutView]; // this is the view that slides in
[window makeKeyAndVisible];

当前aboutView是UIView的子类,位于底部的开始位置,但隐藏了tabBarController。如何更改此选项以使选项卡位于顶部,但aboutView仍位于其他内容的前面?

最佳答案

您需要在UITableBarController的当前事件 View Controller 中将aboutView作为 View 的 subview 添加。您可以通过selectedViewController属性访问该 View 。

您可以将代码添加到aboutView实现中,以在 View 出现时对其进行动画处理。

我在弹出 View 中执行以下操作,该操作要显示在选项卡栏控件下。您可以在aboutView实现上将一些代码添加到didMoveToSuperview消息中:

- (void)didMoveToSuperview
{
    CGRect currentFrame = self.frame;

    // animate the frame ... this just moves the view up a 10 pixels. You will want to
    // slide the view all the way to the top
    CGRect targetFrame = CGRectOffset(currentFrame, 0, -10);

    // start the animation block and set the offset
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:0.5]; // animation duration in seconds
    [UIView setAnimationDelegate:self];

    self.frame = targetFrame;

    [UIView commitAnimations];
}

因此,将aboutView添加到所选 View Controller 的 View 时,它将自动创建动画。

10-08 14:52