簡體   English   中英

具有多個相同子視圖的可可觸摸視圖

[英]Cocoa touch view with multiple identical subviews

我正在首次涉足Cocoa Touch編程(也是我第一次涉足Cocoa),並且正在為iPhone編寫一個簡單的游戲,盡管這個問題通常是關於Cocoa touch的。

主用戶界面由在屏幕上水平排列的相同的​​作用按鈕(僅顏色不同)組成。 盡管它們的作用類似於按鈕,但它們需要具有自定義的繪制外觀。 每個事件都以相同的方式響應觸摸事件,從而觸發應用程序中的其他事件。

我想定義一個自定義視圖,一方面是要對行為進行更多控制,而不是僅僅擁有一堆標准按鈕,另一方面是要更多地了解可可編程。

  • 我是否應該用一個子視圖數組定義一個主視圖,每個子視圖都會繪制自身並轉發觸摸事件? 每個按鈕都應執行標准的操作,例如在觸摸時顯示按下狀態等。 對於這種情況,是否存在任何預先存在的容器視圖?

  • 還是應該只定義一個主視圖來繪制整個條帶並檢測發生觸摸的地方? 我覺得這是一種設計不良的方法-我不應該編寫命中測試代碼。


編輯以澄清問題

您應該使用子視圖數組-這樣,每個“按鈕”類都知道如何繪制自身,並且其父視圖(您所說的“主視圖”)將按鈕放置在需要放置的位置。

其次是NDA:只談論iPhone。

如果您有很多按鈕,並且想用它們來做一些奇特的事情,我建議您使用layers 您的UIView將處理解釋哪一層進行了觸摸(命中測試)並做出適當響應。 如果您要做的是管理帶有各種效果和動畫的一整套按鈕,那么這可能是一條更簡單的方法。

至於糟糕的工程,一點也不。 如果您查看相關的指南,您會看到核心動畫和圖層確實需要進行命中測試(盡管這相對容易),但是它比UIView繪制所有圖形要干凈得多,並且比許多子視圖更有效。 它恰好在這兩種方法之間滑動。

全面披露:我只是想着自己如何最好地利用這些內容,而只是針對更復雜的交互式控件。

更輕巧的方法是將子層添加到UIView的層。 使用hitTest:將您在UIView上收到的觸摸分派到需要接收它的CALayer實例。

如果您需要更多UIResponder行為(touchesBegan等),則可能需要使用子視圖而不是子層,因為這將使您可以直接在對象中處理事件,而不必從中央響應器分派事件(您的主UIView)。

因此,最重要的一點是主UIView應該知道(處理)與各個按鈕相關的行為。 如果有必要從一個中央位置進行所有控制,則可以將所有邏輯放在UIView中,並且僅將子層用於輕量級顯示即可。 如果將行為放入按鈕本身更有意義,則應將其設為UIResponders並作為UIView的子類,並將其添加為主視圖的子視圖。

您可以在“界面生成器”中布局視圖。 只需在視圖控制器的視圖中拖動一堆UIButton

為了響應事件,您可以在視圖控制器中定義一個IBAction並將按鈕連接到它。

這都是非常基本的。 我真的建議您至少閱讀一下Apple在線提供的iPhone編程介紹。 它將教您iPhone和Interface Builder的基礎知識。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM