我有一个UIViewController
(进一步的'UIVC')有很多代码,我需要在它上面展示另一个视图(得分表),它本身也有一堆代码和它的视图使用 IB 设计,所以它也有自己的 IB 连接. 所以我决定把它分成两个UIViewControllers
,这很明显。一切正常,但我仍然需要呈现我的分数表,而不是像另一个UIViewController
那样,而是像往常一样UIView
使其半透明,以便用户可以UIVC
通过分数表视图看到主要发生的事情(由于其透明度)。此外,我需要让 main 中的代码UIVC
仍然运行。
很好的例子是 Counter Strike 游戏(以及许多其他游戏),当您在游戏中按 TAB 键时,您可以看到得分表,但它不支持游戏,您可以看到游戏中发生的事情。
我在想我可以使用presentModalViewController
(比如游戏中心)来实现它,但我不能让它透明,所以我看不到UIVC
背景。就像我说的分数表有自己的代码和许多 IBOutlets 一样,我想将它与主UIVC
代码分开。
那么如何实现我的需求呢?(分离出分数表的代码,使其透明,不要中断执行主UIVC's
代码)。我的应用程序不是可可,它只是普通的应用程序
我所做的尝试:试图使分数表的UIView
背景为[UIColor clearColor]
同时将其呈现为modalVC。没运气。此外,我试图取消选中UIView's
opaque 属性 - 不走运。试图将UIView's
alpha 设置为 0.5 - 仍然没有运气。还试图让 self.navigationController.view.hidden=YES,没有运气。看不到主要的 UIVC“图片”。此外,我尝试在分数表中将所有子视图 alpha 设置为 0.2,但它仍然显示白色非透明屏幕。
4 回答
看看这是否有效,它显示透明视图控制器但概念相同。这里
但是我不完全确定您的第一个视图控制器是否会保持可见。
我发现的最佳选择是通过扩展 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 的代码不成立。
即使你用半透明的方式呈现第二个视图控制器,你也看不到第二个视图控制器之外的第一个视图控制器。呈现的模型视图控制器在 IOS 中应该是不透明的。
我有一个带有透明背景边距的小表格视图的情况。我最终创建了一个包含表格视图的 UIView 类。我在这个 UIview 中编写了两个方法,即
-(void)presentTransparentViewin(UIView*)view;
-(void)removeViewwithAnimation;
在 Uiview 中实现 UITableview 的委托方法听起来像是一个糟糕的编程实践,效果很好。
只是为了满足您的要求,只需 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];