创建要在多个UIViewControllers中显示的UIView

时间:2014-04-19 05:20:40

标签: ios objective-c uiview uiviewcontroller

我正在创建一个简单的小弹出视图,类似于按下音量按钮时弹出的弹出窗口。我想在不同的视图控制器中显示该弹出视图的实例。我一直在思考几种方法,但我想知道什么是最好的方法,考虑到MVC,复杂性,以及其他方面的好处'做法。

目前,我正在我的UIViewController中创建和显示这个UIView。我证明了这种方法的合理性,因为它实际上是一个很小的视图,我做了很多工作来修改它在VC中的行为,因此代码已经存在于VC中。基本上,我制作一个框架,设置背景,应用角半径,为其添加文本,应用运动效果,然后使其淡入然后淡出。我可以将代码复制并粘贴到我的其他VC中,但这显然是一种糟糕的方法。

我可以创建一个UIView的子类,我确信我可以使用drawRect来绘制它,但是我不确定如何将该视图完全添加到VC中间,除非我拖动看看我的风险投资并改变它的阶级。但是,如果我这样做,我可以在Interface Builder中完成大部分工作,如果我可以使用自动布局始终保持居中,这将是首选。但是,我需要将UIView复制并粘贴到每个VC中并隐藏它 - 听起来并不好。

我可以创建UIView的子类,而不是使用drawRect绘制,实现一个创建UIView并返回它的方法。然后在VC中我只调用该方法并添加它作为子视图返回的视图。我从未这样做过,而且我不确定这是不是一种合适的做法。

实现这样一个可以从我的任何VC上抛出屏幕的视图的合理方法是什么?谢谢!

请注意,此视图的大小应始终相同,位于屏幕中央,不与任何特定VC绑定。它应该保持在屏幕上不受转换等影响。它非常类似于Volume弹出窗口。

2 个答案:

答案 0 :(得分:0)

  

我想在多个视图控制器中显示相同的弹出窗口。

我希望你的意思是你想在多个视图控制器中拥有同一个类的单独实例。给定视图只能有一个超级视图,因此它一次不能存在于多个视图中。

  

我不确定如何将该视图完全添加到VC中间

在超级视图中很容易将视图居中。要水平居中,请从父级的宽度中减去视图的宽度。将结果除以2.那就是你的X坐标。 Y坐标也是如此,除了你明显使用高度。

更简单的方法是通过将superview的宽度和高度除以2来创建一个点。将视图的center属性设置为该点。

  

实现这样一种可以从我的任何VC上抛出的视图的合理方法是什么?

请勿尝试重复使用相同的视图。没有必要,尝试在控制器之间传递它会使代码复杂化。只需让任何需要显示弹出窗口的控制器创建自己的副本。

请记住,视图是存储在模型中的数据的接口 - 它们可以显示该数据或让您与模型进行交互,但它们不应该自己存储应用程序状态。鉴于此,没有理由您需要在多个视图控制器中使用相同的视图。只要弹出窗口从正确的位置获取数据,您就可以拥有任意数量的实例。

如果弹出窗口确实与任何视图控制器的内容分开,则另一种可能的策略是使用视图控制器包含。您可以创建一个视图控制器,只处理" app-wide"东西,像这个弹出窗口,并让它加载和卸载各种其他视图控制器作为它的孩子。尽管如此,我要小心不要试图这样做 - 它可能比你需要的更复杂,而且肯定比你现在应该尝试的更复杂,因为你似乎仍然在试着你的海洋腿。

答案 1 :(得分:0)

听起来MBProgressHUD是你正在寻找的东西。 FFCircularProgressView也可能会有所帮助。