2010-02-12 88 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完成所有繪製更清晰,比許多子視圖更高效。它恰好在這兩種方法之間滑倒。

完全披露:我只是圍繞如何最好地利用這些東西,而不是更復雜的交互式控件。