如何使用透明度显示当前视图的视图

时间:2012-12-12 09:19:17

标签: iphone ios ipad uiview uiviewcontroller

我有一个UIViewController(进一步'UIVC')有很多代码,我需要在它上面显示另一个视图(分数表),它本身也有一堆代码,它的视图使用IB设计所以它也有自己的IB连接。所以我决定把它分成两个UIViewControllers,这很明显。一切正常,但我仍然需要提供我的分数表而不是另一个UIViewController,但就像通常UIView一样,使其半透明,以便用户可以看到主UIVC中发生了什么得分表视图(由于其透明度)。此外,我需要使主UIVC中的代码仍然运行 漂亮的例子是反恐精英游戏(以及许多其他游戏),当你在游戏中按TAB键时,你可以看到分数表,但它不能保持游戏,你可以看到游戏中发生了什么。
我想我可以使用presentModalViewController(像游戏中心)来实现它,但我不能让它透明,所以我不能在后台看到UIVC。就像我说得分表有自己的代码和许多IBOutlets一样,我想把它从主UIVC代码中分离出来。
那么如何实现我的需求呢? (将得分表的代码分开,使其透明,不要插入执行主UIVC's代码)。我的应用程序不可靠它只是通常的应用程序
我尝试过的方法:在将UIView作为modalVC呈现时尝试制作得分表的[UIColor clearColor]背景。没运气。另外,我试图取消选中UIView's不透明属性 - 没有运气。试图将UIView's alpha设置为.5 - 仍然没有运气。还尝试使self.navigationController.view.hidden = YES,没有运气。看不到主要的UIVC“图片”。此外,我尝试在分数表中将所有子视图alpha设置为.2,但它仍然显示白色非透明屏幕。

4 个答案:

答案 0 :(得分:0)

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

但是我不完全确定你的第一个视图控制器是否仍然可见。

答案 1 :(得分:0)

即使你擅长提出半透明的第二个视图控制器,你也看不到第一个视图控制器超出第二个视图控制器。在IOS中,假设模型视图控制器应该是不透明的。

我有一个带有transparentbackground margin的小表视图的情况相同。我最终创建了一个UIView类,它保存了tableview。我在这个UIview中编写了两个方法,即

-(void)presentTransparentViewin(UIView*)view;

-(void)removeViewwithAnimation;

在Uiview中实现UITableview的委托方法时,听起来糟糕的编程效果很糟糕。

答案 2 :(得分:0)

只是为了您的要求,只需在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]; 班级拨打电话,如下所述..

{{1}}

答案 3 :(得分:0)

我发现的最佳选择是通过扩展UIView(不是UIViewController)并在IB中设计其视图来创建自定义类。然后我将FileOwner设置为IB中的班级名称,设置所有IB连接,实际写入(copypasted :)所需的方法来显示分数。
棘手的部分是使用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方法填充数据然后只是让它隐藏= NO和voilla ...而view.background是clearColor所以我得到了透明度。
这样我就将得分表的代码和IB出口分离到了另一个类(UIView ext),并且它的视图足够透明,因为它不是UIViewController,我的主要UIVC的代码不能保存。