MVC是一个很大的概念。它不是一个具体的规则,而是一个指导性的哲学,并不总是以相同的方式实施。阅读Apple's discussion of MVC以了解可可中传统MVC和MVC之间的差异。
很难说如何将MVC应用到您的应用程序,因为您还没有告诉我们该应用程序应该做什么,而且它听起来不像一个现实的应用程序。所以我会在这里尽我所能做出一些假设。一个只在背景上的固定位置绘制一组圆圈的应用程序并不是很有趣 - 它几乎可以是所有视图,几乎不需要任何控制器。因此,我们可以说,这些圈子都在向不同的方向移动,以不同的颜色绘制,并随着时间的推移而变化。现在您开始需要一个模型,以便您可以跟踪这些圆圈所代表的数据,以及一个将模型转换为可以由视图表示的术语的控制器。
由于您具体了解绘制圆圈,我们先从视图开始。在给定必要参数的情况下,知道如何绘制圆的自定义视图似乎是个不错的主意:区域,颜色和位置。您可能会创建这些属性,并重写-drawRect:以便以给定颜色绘制给定区域的圆。
我们不知道这些圆圈代表什么,但如果它们没有代表什么东西,那没什么好玩的,所以我们假设应用程序的工作是帮助我们比较公司。我们有关于收入,市场资本总额,员工数量,信用评级,姓名,股票代码等的数据。您可以创建自定义对象来存储每个公司的所有数据,也可以将它们全部放在字典中。我们的模型是一组这些自定义对象或字典。
请注意,圈子视图并不知道关于公司的任何内容,并且该模型不知道有关圈子的任何信息。这是一件好事。这也是控制器进来的地方。控制器是您放置代码的地方,它使用视图直观地表达模型。它还从视图中解释事件,并根据需要更新模型。因此,我们的控制人员都知道公司的具体情况以及圈子视图的属性。它为模型中的每个公司创建一个循环视图。我想要一个圈子的区域对应于公司的市值,代表收入的垂直位置和表示雇员人数的横向位置。我们将根据公司的信用评级分配一种颜色。当然,控制者应该跟踪所有的圈子视图,以及在圈子视图和公司之间进行映射的方法。
现在你已经有了一些东西。这仍然是一个非常简单的应用程序,但是您可以在多个维度上比较公司的有用图表。让我们改进它。
首先,很难知道哪个圈子代表哪家公司。如果圆形视图可以选择显示某些文本,那将会很好。让我们添加标题和副标题属性,并修改-drawRect:分别在圆上方和下方绘制这些字符串。我们还将更改控制器,以便点击或点击圆圈可将该圆圈的标题和副标题设置为公司的名称和股票代码,或者如果之前已设置,则清除它们。其次,很高兴能够在某个时刻对公司进行比较,但如果我们能够随着时间的推移显示变化,则更加有趣。让我们改变模型以包含收入,市值,员工和评级的历史数据。我们可以更新控制器,以便它可以使用历史数据为圆圈添加动画。
第一个变化与我们如何在屏幕上绘制信息有关,并且根本不需要对模型进行任何修改。第二个变化是关于我们必须使用哪些数据,并且根本不需要对视图进行任何更改。您可以轻松地重复使用圆形视图来表示其他类型的数据,或者甚至可能是空气曲棍球比赛中的冰球。它只是一个彩色圆圈。您可以在另一个应用程序中重新使用该模型来处理相同类型的数据。
我确信在这个非常冗长的解释说明中,假设的应用程序与您自己的应用程序几乎没有相似之处,但也许它有助于解释为什么MVC是有用的并告知您自己的结构应用。祝你好运。
谢谢,这真的有帮助。我创建了一个拥有多个不同群众圈子的应用程序。我会设置一定的速度,并使用我编写的一些物理功能来显示球之间的动量碰撞,就像在游戏中一样。他们是免费的飞球相撞,就是这样。我创建这个小应用程序的方式并没有遵循所有的MVC。我来自一个沉重的c/c#背景,并且从未使用过MVC,所以一个例子正是我所需要的。谢谢你的例子,它确实有帮助。 – Dalisto1 2011-03-24 04:51:31
太好了 - 很高兴我能帮上忙。 – Caleb 2011-03-24 06:03:33