2010-02-12 52 views
0

我有我的第一次进入可可触摸编程(和我的第一个进入可可一般),并为iPhone编写一个简单的游戏,虽然这个问题是关于可可触摸一般。Cocoa触摸视图与多个相同的子视图

主用户界面由水平排列在屏幕上的一条相同的作用按钮(仅颜色不同)组成。尽管它们像按钮一样,但它们需要具有自定义的绘制外观。每个人都以相同的方式响应触摸事件,从而触发应用程序中的其他事件。

我想定义一个自定义视图,部分是为了更好地控制行为,而不仅仅是拥有一堆标准按钮,还有一部分是为了更多地了解可可编程。

  • 我应该定义与子视图的阵列的每一个的平本身和向前触摸事件的主视图?每个按钮都应该做标准的事情,比如触摸时显示按下状态等等。这种情况下是否有任何预先存在的容器视图?

  • 或者我应该定义一个主视图来绘制整个条并检测触摸的位置?我觉得这是一个设计不好的方法 - 我不应该编程命中测试代码。


编辑,以澄清问题

+1

iPad SDK仍处于NDA之下,因此您不应该在此讨论。但我相信iPhone也可以提出同样的问题。 – MrMage 2010-02-12 14:20:24

+0

啊,没有意识到。这只是一个普遍的可可触摸问题。 – 2010-02-12 14:32:56

回答

1

更轻量级的方法是将子图层添加到您的UIView图层。使用hitTest:将您在UIView上收到的接触发送给需要接收它的CALayer实例。

如果您需要更多的UIResponder行为(touchesBegan等),您可能需要使用子视图而不是子图层,因为这样可以直接在对象中处理事件,而不必从中央调度它们响应者(你的主要UIView)。

因此,重要的位可能只是多少与您的个人按钮相关的行为应该由您的主UIView知道(处理)。如果从中心位置控制所有东西是有意义的,则可以将所有逻辑放在UIView中,并仅使用子层进行轻量级显示。如果将行为放入按钮本身更有意义,它们应该是UIResponders和UIView的子类,并作为主视图的子视图添加。

0

可以布置在Interface Builder您的视图。只需在视图控制器视图中拖动一堆UIButton即可。

要响应事件,请在视图控制器中定义IBAction并将按钮连接到它。

这是非常基本的。我真的建议你至少通过苹果在线的iPhone编程介绍。它会教你iPhone和Interface Builder的基础知识。

+0

我意识到我当然可以将一些UIButtons拖到我的视图上,但这并不是我所要求的 - 我想创建一个自定义视图,以便可以控制按钮的绘图,向条带添加更多按钮以编程方式,重新使用视图等。我还使用它来了解更多关于可可触摸和使用自定义视图和控制器的信息。 – 2010-02-12 14:39:21

1

你应该使用一个子视图数组 - 这样每个“按钮”类都知道如何绘制自己和它的超级视图(你声明的“主视图”)将按钮放在他们需要去的地方。

第二关于NDA:只是谈论iPhone。

1

如果你有很多的按钮,并想与他们做一些花哨的事情,我推荐使用layers。您的UIView将处理解释哪个图层有触摸(点击测试)并且 正确响应。如果你只是在管理一个带有各种效果和动画的按钮,那么这可能是一条更简单的路线。

至于坏工程,根本不是。如果你看看相关的指南,你会看到核心动画和图层确实需要命中测试(虽然这相对容易),但它比UIView完成所有绘制更清晰,比许多子视图更高效。它恰好在这两种方法之间滑倒。

完全披露:我只是围绕如何最好地利用这些东西,而不是更复杂的交互式控件。