Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 可以将视图控制器子类化吗?_Iphone_Objective C_Iphone Sdk 3.0 - Fatal编程技术网

Iphone 可以将视图控制器子类化吗?

Iphone 可以将视图控制器子类化吗?,iphone,objective-c,iphone-sdk-3.0,Iphone,Objective C,Iphone Sdk 3.0,我是一个相对客观的人,所以请容忍我。苹果公司的文档指出,让两个视图控制器控制一个视图不是一个好主意 我正在构建一个在单一视图中进行的游戏。我想创建可以将自身添加到主视图(作为子视图)的对象。是否可以将这些对象创建为视图控制器子类,还是必须将这些对象创建为NSObject的子类,并处理来自视图控制器的所有视图和子视图内容?这就是我现在试图做的,但它正在变成一个结构混乱…您的子视图不应该是UIViewController的,而应该是UIViewController的。是的,您几乎总是需要对视图控制器

我是一个相对客观的人,所以请容忍我。苹果公司的文档指出,让两个视图控制器控制一个视图不是一个好主意


我正在构建一个在单一视图中进行的游戏。我想创建可以将自身添加到主视图(作为子视图)的对象。是否可以将这些对象创建为视图控制器子类,还是必须将这些对象创建为
NSObject
的子类,并处理来自视图控制器的所有视图和子视图内容?这就是我现在试图做的,但它正在变成一个结构混乱…

您的子视图不应该是UIViewController的,而应该是UIViewController的。

是的,您几乎总是需要对视图控制器进行子类化来处理视图的细节。视图中的对象应该是UIViews或其子类。

您需要UIViewController的一个子类来管理整个屏幕。控制器的视图可能是一个包含所有正在发生的事情的大型容器。如果需要其他控制器,只需为它们创建NSObject的子类,并使每个子类都有自己的UIView(这是主控制器视图的子视图)


不要让UIViewController的多个子类同时运行。你会得到各种古怪的行为,因为这是一个不受支持的设置。

像这样的游戏设计的重要部分是确保你把大部分逻辑放在游戏的数据模型中,而不是放在视图控制器或视图中。数据模型应该跟踪对象在游戏空间中的位置,它们应该具有哪些逻辑属性和视觉属性,以及它们是否与其他游戏对象交互

视图控制器的功能应该只是将每个对象的逻辑转换为视图。视图的唯一功能应该是无声地绘制控制器告诉它的任何内容

例如:假设您有一个简单的游戏,其中两个球从墙上或彼此之间反弹。当它们与另一个球碰撞时,它们会改变颜色。每个球和每面墙将由数据模型中的单个对象表示。每个对象将负责在任何给定时间对球/墙的状态进行建模,并确定其位置以及是否发生碰撞

换句话说,数据模型应该处理除了实际显示之外的所有关于游戏的事情。原则上,数据模型应完全独立于任何特定显示。您应该能够在标准视图、网络视图甚至命令行上玩游戏

视图控制器的作用是将游戏对象的逻辑位置和逻辑状态转换为游戏屏幕上的子视图。例如,使用UIImageView显示球的图像。视图控制器只是告诉视图使用特定图形在屏幕上的特定位置绘制一个球。就这样。随着数据模型的更改,视图控制器会更改绘制的内容,但它不记得上次绘制的内容,也不记得下一次绘制的内容和位置。它只是简单地反映了数据模型

为了处理用户输入,它颠倒了将UI更改转换为数据模型输入的过程。但是,视图控制器不会计算这些输入的结果或结果。这就是数据模型的工作

通过将游戏的所有复杂逻辑放在数据模型中,您可以轻松更改视图控制器/视图对以及添加、删除或修改许多不同的视图。例如,你可能在iPhone、iPad和Mac上玩同样的游戏。大多数代码在所有三个平台上都是相同的,但每个平台都有自定义的视图控制器/视图对


模型视图控制器非常重要,随着应用程序复杂性的增加,它变得越来越重要。当你试图扩展应用程序时,很容易在控制器或视图中塞满大量数据和逻辑,这会使它们过载,并造成相互关系的混乱。首先编写数据模型。使数据模型能够仅通过文本输入玩整个游戏。然后,也只有这样,才能连接图形界面。如果您遵循这种模式,那么编写图形元素将非常简单且非常灵活

我将想象您正在编写一个Pacman游戏,您的目标是使用主视图作为迷宫,并使用这些子视图来表示您的游戏角色

表示这种混合的一种方法是使用一个视图控制器(从UIViewController子类)来控制所有视图。这是完全合法的。因此,单视图控制器负责主视图(迷宫)和子视图(角色)

不过,我建议您在这种情况下使用核心动画,并将所有内容都视为层。这样,您只有一个视图支持所有层,并且使用一个控制器负责管理角色位置和用户输入。它会大大简化你的生活