透明子视图控制器的视图

Posted

技术标签:

【中文标题】透明子视图控制器的视图【英文标题】:Transparent Child View Controller's View 【发布时间】:2017-12-20 05:48:41 【问题描述】:

我正在父视图控制器中创建一个子视图控制器并使用下面的代码呈现它 -

    self.addChildViewController(childVC)

    childVC.view.frame = self.view.bounds

    self.view.addSubview(childVC.view)

    childVC.view.autoresizingMask = [.flexibleWidth,.flexibleHeight]

    childVC.didMove(toParentViewController: baseVC)

子视图控制器只是在中间显示一个 200 X 300 的图像视图。我希望子视图控制器模糊父视图控制器的视图并显示这个不透明的图像视图。但是,无论我做什么,我似乎都无法让它显示底层父视图控制器的内容。我已经在子视图控制器的 viewDidLoad 中尝试过以下操作 -

view.backgroundColor = UIColor.black.withAlphaComponent(0.5)

我在这里缺少什么?有更好的方法吗?子视图控制器的目的是通过模糊父视图控制器的内容来封装图像预览逻辑,并在其视图的中心显示一个 UIImageView。

【问题讨论】:

您是否尝试过使用 XCode 界面生成器,我在那里实现了类似的壮举。 试试这个:view.backgroundColor = UIColor.init(white: 0.4, alpha: 0.8) @MohammedZameer 我希望以编程方式执行此操作,以便我可以将子视图控制器的图像预览功能包装为可重用的框架。 【参考方案1】:

尝试使用 ChildVC.backgroundColor = UIColor.black.withAlphaComponent(0.5)。此代码使子视图显示为半透明。

希望这会有所帮助。

【讨论】:

【参考方案2】:

创建一个新的ViewController 作为ChildViewController

ParentViewController 转到ChildViewController

设置关注property

你必须选择PresentationOver current context

您还可以根据自己的要求更改Transition

见下图

【讨论】:

但是它是如何让子视图控制器的视图成为透明透视的呢?在我的例子中,正如你在上面看到的,子视图控制器的视图完全覆盖了父 VC。所以我希望子 VC 在父视图上显示一个模糊的背景,然后在中间渲染图像。因此,当一切都在屏幕上完成时,我想看到图像视图,并通过模糊的背景查看父视图的背景图像/颜色。 另外,如果我遵循这种方法并从父 VC 执行 self.present(....) 那么子 VC 并没有真正添加为父级是吗? 在给出一个 segue 之后,你必须从父 VC 调用 self.performSegue(withIdentifier: "sgOrderStatusPopup", sender: nil) 方法....所以 childVC 出现在 parentVC 上 这是我的假设,但我不想在这个解决方案中使用故事板/IB。父子视图控制器方法有效。【参考方案3】:

将 childViewController 视图的背景颜色设置为您想要的,并将其不透明度设置为 50% 或 60% ,无论您想要什么。

这将显示具有模糊效果的父视图。

【讨论】:

关键是不要在子视图控制器的视图上设置alpha。如果设置了,则在所有子视图上设置相同的 alpha。因此,我没有这样做 - view.alpha = 0.5,而是使用 view.backgroundColor = UIColor.black.withAlphaComponent(0.5) 让它工作【参考方案4】:

我原来的解决方案 -

view.backgroundColor = UIColor.black.withAlphaComponent(0.5)

正在工作。我的父视图控制器的视图是白色的,细节非常稀疏,所以我认为父视图不可见,这对我来说是愚蠢的忽视。

【讨论】:

以上是关于透明子视图控制器的视图的主要内容,如果未能解决你的问题,请参考以下文章

带有非透明子视图的 iOS 8 透明视图

拖动底部子视图之一时平滑更新顶部子视图(iOS)

UIControl 子类 - 如何停止触摸事件流?

htmlcss和js原生写一个模态弹出框,顺便解决父元素半透明子元素不透明效果

将视图控制器推入模态视图控制器视图

如何从子视图控制器访问父视图控制器的视图?