1

我有一个UIViewController(进一步的'UIVC')有很多代码,我需要在它上面展示另一个视图(得分表),它本身也有一堆代码和它的视图使用 IB 设计,所以它也有自己的 IB 连接. 所以我决定把它分成两个UIViewControllers,这很明显。一切正常,但我仍然需要呈现我的分数表,而不是像另一个UIViewController那样,而是像往常一样UIView使其半透明,以便用户可以UIVC通过分数表视图看到主要发生的事情(由于其透明度)。此外,我需要让 main 中的代码UIVC仍然运行。
很好的例子是 Counter Strike 游戏(以及许多其他游戏),当您在游戏中按 TAB 键时,您可以看到得分表,但它不支持游戏,您可以看到游戏中发生的事情。
我在想我可以使用presentModalViewController(比如游戏中心)来实现它,但我不能让它透明,所以我看不到UIVC背景。就像我说的分数表有自己的代码和许多 IBOutlets 一样,我想将它与主UIVC代码分开。
那么如何实现我的需求呢?(分离出分数表的代码,使其透明,不要中断执行主UIVC's代码)。我的应用程序不是可可,它只是普通的应用程序
我所做的尝试:试图使分数表的UIView背景为[UIColor clearColor]同时将其呈现为modalVC。没运气。此外,我试图取消选中UIView'sopaque 属性 - 不走运。试图将UIView'salpha 设置为 0.5 - 仍然没有运气。还试图让 self.navigationController.view.hidden=YES,没有运气。看不到主要的 UIVC“图片”。此外,我尝试在分数表中将所有子视图 alpha 设置为 0.2,但它仍然显示白色非透明屏幕。

4

4 回答 4

0

看看这是否有效,它显示透明视图控制器但概念相同。这里

但是我不完全确定您的第一个视图控制器是否会保持可见。

于 2012-12-12T09:30:10.090 回答
0

我发现的最佳选择是通过扩展 UIView(不是 UIViewController)并在 IB 中设计其视图来创建自定义类。然后我在 IB 中将 FileOwner 设置为我的类名,设置所有 IB 连接,编写(实际上是复制粘贴 :))显示分数所需的方法。
棘手的部分是使用 initWithCoder/awakefromNib 方法,尤其是 initWithCoder,我需要在其中加载我的 nib,主要是通过先前设置的 IB 连接添加其视图。这不仅是所有需要的子视图都必须是 IB 连接的,而且(父/根)视图本身也是如此。

    - (id)initWithCoder:(NSCoder *)aDecoder {
    if ((self = [super initWithCoder:aDecoder]))
    {
        [[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil];

        [self addSubview:vwTopLevelView]; //vwTopLevelView is the IB link to parent view
// without adding vwTopLevelView it always loads empty view so you just wont c it
// but all IB links will be valid, image view will have their images loaded etc
    }
    return self;
}

然后我只是将新的分数表视图添加到主 UIVC,检查其属性为隐藏并将类从 UIView 设置为我的类。现在分数表与主 UIVC 一起加载,但它是隐藏的,我只需要调用 1 个方法来填充数据,然后将其设置为 hidden=NO 并且瞧……而且 view.background 是 clearColor 所以我得到了透明度.
这样,我将分数表的代码和 IB 出口分离到另一个类(UIView ext),它的视图足够透明,因为它不是 UIViewController,所以我的主 UIVC 的代码不成立。

于 2012-12-12T13:47:56.750 回答
0

即使你用半透明的方式呈现第二个视图控制器,你也看不到第二个视图控制器之外的第一个视图控制器。呈现的模型视图控制器在 IOS 中应该是不透明的。

我有一个带有透明背景边距的小表格视图的情况。我最终创建了一个包含表格视图的 UIView 类。我在这个 UIview 中编写了两个方法,即

-(void)presentTransparentViewin(UIView*)view;

-(void)removeViewwithAnimation;

在 Uiview 中实现 UITableview 的委托方法听起来像是一个糟糕的编程实践,效果很好。

于 2012-12-12T09:38:07.710 回答
0

只是为了满足您的要求,只需 setAlphs 的视图,如下所示viewDidLoad:

[self.view setAlpha:0.5];// set alpha with your requirement

当你想显示视图时,从你的 UIVC 视图中调用这个方法

如果您粘贴此波纹管方法并使用对象AppDelegate调用,这很好AppDelegate

在下面创建yourViewController类似下面的对象AppDelegate.h..

yourViewController *yourViewController;

并在下面的方法中使用..

-(void)addMakeOfferView{

   yourViewController=[[yourViewController alloc]initWithNibName:@"yourViewController" bundle:nil];
    objMakeOfferView.view.transform = CGAffineTransformMakeScale(1.3, 1.3);
    objMakeOfferView.view.alpha = 0;
    [UIView animateWithDuration:.35 animations:^{
        objMakeOfferView.view.alpha = 0.94;
        objMakeOfferView.view.transform = CGAffineTransformMakeScale(1, 1);
    }];
    objMakeOfferView.view.frame=CGRectMake(0, 0, 320, 480);
    [self.window addSubview:objMakeOfferView.view];
}

并像下面这样从你的UIVC班级打电话..

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate addMakeOfferView];
于 2012-12-12T09:51:37.490 回答