2011-02-02 53 views
16

我想知道如何從零開始創建自定義iPhone控件,或者使用現有的庫或框架。iPhone/iOS自定義控件

我已經看到了three20庫,藏漢作爲tapku和觸摸習俗有專門的iOS控制不錯,如表視圖等,但我說的是在這裏進行完全定製,交互控制。

比方說我要拍一個類似從這個程序撥號控制:http://store.apple.com/us/product/H2654LL/A

我從哪裏開始?

  • 我會繼承UIView並定製它嗎?
  • 我會用石英2d嗎?
  • 我會使用OpenGL ES在屏幕上繪製類似的東西嗎?
  • 我還可以使用IB來設計/佈置我的自定義視圖嗎?

我只是有點困惑哪個方向走這裏。

是 - 這個問題已經被問和回答過幾次,但我還沒有找到一個滿意的答案,解決了以上幾點。

回答

23

什麼子類 而不是UIView你可能會想繼承UIControl。此類具有Target/Action模式構建的功能,您可以使用它來響應您的自定義控件生成的操作。出於這個特定原因,UIKit上的大多數元素(如按鈕和滑塊)從UIControl繼承。

可視化你的子類 繪圖真的取決於你想要實現什麼以及你想要動畫的部分。您可以使用圖像,使用石英或OpenGL進行繪製,具體取決於您需要什麼或您喜歡什麼。只需使用該技術,以最簡單的方式達到預期的效果。多個圖像可以用來處理不同的狀態(按下等)或用於精靈動畫。 CALayers很容易旋轉或移動。

無論您使用哪種技術,您都可能使用傳入觸摸事件來控制動畫。在撥號控制的情況下,您可以根據y座標移動來控制旋轉量。

爲了說明:我如已使用的圖像如果只需要我的控制按壓例如當改變:只是交換圖像。我也很喜歡使用CALayer,它可以讓您輕鬆地生成邊框,蒙版,漸變和角落半徑,所有動畫也都很容易。

在界面生成器中使用 使用桌面上的Cocoa可以爲自定義控件構建自定義IB調色板。 iOS版從來沒有這樣的功能,我不事IB插件可供的Xcode 4

所以目前處理自定義子類的唯一方法是通過使用IB一個UIView,並在設定的「自定義類」字段Identity Inspector添加到您的自定義類的名稱。這樣你就可以看到你的佈局和尺寸。在Interface Builder中,它只是一個矩形,運行應用程序時,XIB將實際將該視圖反序列化到您的自定義類。

使用UIControl時,您可以免費獲得目標/操作機制。因此,您可以將觸摸事件連接到IB中的任何對象,就像使用任何其他標準UIKit控件一樣。

有一點需要注意:如果您有自定義- initWith....:選擇器,那些將不會被調用。你的類是從XIB反序列化的,所以你應該使用- initWithCoder:(NSCoder *)aDecoder;作爲初始化。

1

此外,http://www.cocoacontrols.com/platforms/ios/controls上的自定義控件也很少。他們是開源的,因此你可以下載源代碼並與他們一起玩。

+0

而這一個是一個很好的教程http://www.thinkandbuild.it/how-to-build-a-custom-control-in-ios/ – MatterGoal 2013-04-21 17:22:40