Iphone - 绘制视图:哲学和互动

时间:2011-04-06 16:32:44

标签: iphone graphics uiview uiviewcontroller

我知道我需要将UIView子类化为能够在其中绘制。
我还不明白的是,我必须做的方式的哲学......

假设我有一个视图控制器,根据上下文,我可能想在其管理的子视图或圆形,矩形或处理过的图形中绘制一条线。或者让我们说在视图中移动到定义的矩形中的两个点,当它们接近时显示更大的点。

我如何对子视图进行子类化和定义,使其能够仅在其drawRect方法中执行此操作?

控制器如何管理超过这个简单的UIView (让我们假设你有一个视图控制器管理一个视图,里面有很多其他视图,你想要制作一些图纸其中两个),知道需要被绘制到正确的视图中(它是一个控制器,不是吗?),可能与视图交互?绘图完成后,视图如何与控制器交互?

我已经阅读了很多关于绘图的文档(苹果,网络,论坛,教程......),但我仍然无法触及必须要做的哲学。

2 个答案:

答案 0 :(得分:5)

这很简单。创建一个新类OliverView,这是一个UIView。 (即,它是UIView的子类。)在该视图中,使其在drawRect内以奇特的方式绘制内容。

现在创建一个名为OliverVC的UIViewController。在故事板中将OliverView放在OliverVC中。 (beginner explanation of how to do that)。

在OliverView中,属性为“小时”,“分钟”,“秒”。

现在,在OliverView中 - 在drawRect中 - 有一种奇特的方式来显示这些值。 (饼图,发光字母,动画 - 无论你想要什么。)

现在,在OliverVC中,做一些计算以确定津巴布韦的时间,例如。

一旦您想要显示时间, 只需在OliverView中设置这些属性 - 就完成了。

您的同事可能正在编写OliverView。你不需要知道她将如何显示时间。相反,你的同事需要对你在OliverVC的计算一无所知..

所以,它很简单L一部分有显示数据的工作。其中一部分负责提出数据(在应用程序中执行任何类型的计算)。

这是“实时”屏幕设备中唯一可以随时改变视图的架构。


回答下面的问题:如果你有一个完全独立的按钮,你就会忘记这一点。 (或许坐在“OliverView”之上。)所以,这很简单!

答案 1 :(得分:2)

UIView子类中的-drawRect方法定义了视图的屏幕外观。所有绘图都在-drawRect中完成。你的UIViewController在它的UIView上调用方法来告诉它以不同的方式绘制东西或者执行其他一些动作。

UIViewController管理与视图无关的所有内容,该视图与内容的绘制并非固有关联。与视图关联的数据通常存储在控制器中。