Ios 跨多个视图控制器使用共享背景视图的最佳实践是什么?
通常,在我的应用程序中,我需要使用背景图像或具有渐变的自定义视图,如下所示:Ios 跨多个视图控制器使用共享背景视图的最佳实践是什么?,ios,swift,uiview,uiviewcontroller,window,Ios,Swift,Uiview,Uiviewcontroller,Window,通常,在我的应用程序中,我需要使用背景图像或具有渐变的自定义视图,如下所示: UIView.animate(withDuration: self.transitionDurationOut, animations: { self.view.alpha = 0 }) { (Finished) in } 现在我只是定义一个BackgroundView类,该类根据项目的需要呈现自己,然后我将每个视图控制器的根视图作为该类的实例。这是一个不错的
UIView.animate(withDuration: self.transitionDurationOut, animations: {
self.view.alpha = 0
}) { (Finished) in
}
现在我只是定义一个BackgroundView
类,该类根据项目的需要呈现自己,然后我将每个视图控制器的根视图作为该类的实例。这是一个不错的解决方案,但在某些用例中,这是不够的。例如,如果我想使控制器像这样淡出:
UIView.animate(withDuration: self.transitionDurationOut, animations: {
self.view.alpha = 0
}) { (Finished) in
}
屏幕将淡入黑色(窗口的默认颜色)。我宁愿这样做,这样我可以淡出控制器的视图来显示背景。我可以用容器视图来实现这一点,但我希望尽可能多地删除样板代码。有没有办法给窗口一个根视图,如果它的视图变得透明,它将出现在活动控制器的后面?我认为通过将子类设置为视图控制器根视图,您有一个很好的解决方案。在视图控制器根视图中添加一个清晰的子视图,并在该子视图而不是根视图上执行淡入淡出,怎么样 例如:
self.view = BackGroundView() // Gradient background
let fadeView = UIView()
fadeView.backgroundColor = UIColor.clearColor()
/* Add content to fadeView here */
self.view.addSubview(fadeView)
UIView.animate(withDuration: self.transitionDurationOut, animations: {
self.view.fadeView = 0
}) { (Finished) in
}
下面是一些将直接向窗口添加视图的代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
// Let's add a background view to the window so that controllers can fade out without the screen turning black.
let window = UIApplication.shared.windows.first
let bgFrame = window?.frame ?? CGRect(0,0,0,0)
let bgView = BackgroundView(frame: bgFrame)
window?.insertSubview(bgView, at: 0)
return true
}
不确定是否存在性能影响或不这样做的原因。如果设备旋转,我也不认为这会调整视图的大小。正在查找输入。如果主要问题归结为淡入背景视图,那么一个简单的解决方案是淡入位于
视图层次结构顶部具有相同背景的视图
这样,对于淡出的部分,你不必移动子视图
,处理太多的透明度或更改应用程序的整体结构。是的,我考虑过使用容器视图,但我不想破坏我的视图层次结构。不过这是一个可行的解决方案,所以请投赞成票。