视图控制器完成加载时 UIView 背景颜色发生变化
Posted
技术标签:
【中文标题】视图控制器完成加载时 UIView 背景颜色发生变化【英文标题】:UIView background color changing when view controller finishes loading 【发布时间】:2016-10-27 14:18:25 【问题描述】:我正在通过另一个视图控制器以模态方式加载视图控制器,并尝试使用以下方法更改背景颜色:
override func viewDidLoad()
super.viewDidLoad()
transparentBG.backgroundColor? = UIColor.black.withAlphaComponent(0.4)
// transparentBG is a UIView defined in storyboard
当视图动画到位置(向上滑动)时,它会保持我设置的 alpha 值。但是,一旦它到达屏幕顶部,它就会移除 alpha 分量,并将颜色更改为看起来像带有 alpha 分量的颜色,就像灰色,但没有透明度,如下图所示。
如果完成加载后是否还需要维护 alpha 组件?
【问题讨论】:
你想通过半透明顶视图控制器看到上一个屏幕的视图吗?这就是将这个 alpha 添加到子视图的目的吗? 模态视图完成动画后,下方的视图将被移除。 Transparent Modal View on Navigation Controller的可能重复 Tushar - 是的,我希望现有的视图控制器在它下面可见。 James P - 啊......这是有道理的。感谢您的链接! 【参考方案1】:第一步:将其更改为overFullScreen
演示文稿。
第二步:没有第二步。
【讨论】:
【参考方案2】:只需在 viewContriller 上设置演示样式
[myViewcontroller setModalPresentationStyle:UIModalPresentationCustom];
[myViewcontroller setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self.navigationController presentViewController:myViewcontroller animated:true completion:nil];
【讨论】:
【参考方案3】:发生的情况是 alpha 被保留,但在动画完成后前一个视图被删除。
您可以采取几种方法。
截取上一个视图的屏幕截图并将其作为背景插入到新视图中。查看 drawViewHierarchyInRect 函数。您可以在新视图控制器的 init 方法中抓取屏幕截图,然后在 viewDidLoad 中将其设置为背景图像。
另一种方法是将叠加层作为子视图添加到现有视图,甚至是窗口本身。
我已经成功使用了这两种方法。
【讨论】:
谢谢!我会调查的!以上是关于视图控制器完成加载时 UIView 背景颜色发生变化的主要内容,如果未能解决你的问题,请参考以下文章