我有一个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,但它仍然显示白色非透明屏幕。
答案 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的代码不能保存。