/ / iPhone / iOS - sterowanie niestandardowe - iphone, ios, opengl-es, niestandardowe sterowanie

Kontrola niestandardowa iPhone / iOS - iphone, ios, opengl-es, niestandardowe elementy sterujące

Chciałbym wiedzieć, jak utworzyć niestandardową kontrolkę iPhone'a od podstaw lub przy użyciu istniejącej biblioteki lub struktury.

Widziałem bibliotekę Three20, a także tapkui dotykaj zwyczajów, które są dobre dla wyspecjalizowanych kontrolek iOS, takich jak widok tabeli itp., ale mówię tutaj o tworzeniu całkowicie niestandardowych, interaktywnych elementów sterujących.

Powiedzmy, że chciałem zrobić pokrętło podobne do tego z tej aplikacji: http://store.apple.com/us/product/H2654LL/A.

Gdzie miałbym zacząć?

  • Czy podklasowałbym UIView i dostosowałbym go?
  • Czy użyłbym kwarcu 2d?
  • Czy użyłbym OpenGL ES, aby narysować coś takiego na ekranie?
  • Czy nadal mogę używać IB do projektowania / układania widoku niestandardowego?

Jestem trochę zdezorientowany, w którą stronę tu iść.

Tak - na to pytanie zadawano już kilka razy i na nie odpowiadano, ale nie znalazłem jeszcze satysfakcjonującej odpowiedzi, która odnosiłaby się do powyższych punktów.

Odpowiedzi:

23 dla odpowiedzi № 1

Co do podklasy Zamiast UIView prawdopodobnie chciałbyś podklasę UIControl. Ta klasa ma funkcjonalność dlaKompilacja wzorca celu / akcji, w której można reagować na akcje generowane przez kontrolkę niestandardową. Większość elementów w UIKit, takich jak przyciski i suwaki, dziedziczy z UIControl z tego konkretnego powodu.

Wizualizacja Twojej podklasy Rysowanie naprawdę zależy od tego, co chceszosiągnąć i jakie części chcesz animować. Możesz używać obrazów, rysować za pomocą kwarcu lub OpenGL w zależności od tego, czego potrzebujesz lub co wolisz. Wystarczy, że zastosujesz tę technikę, aby uzyskać pożądany efekt w jak najbardziej uproszczony sposób. Wiele obrazów może być używanych do obsługi różnych stanów (wciśnięty itp.) Lub do animacji duszków. KALwarstwy można łatwo obracać lub przesuwać.

Bez względu na to, jakiej technologii używasz, zrobiłbyś toprawdopodobnie użyje przychodzących zdarzeń dotykowych do sterowania animacją. W przypadku pokrętła można kontrolować wielkość obrotu na przykład w oparciu o ruch współrzędnych y.

Aby to zilustrować: na przykład użyłem obrazów, jeśli moja kontrola wymagała zmiany tylko po naciśnięciu, na przykład: po prostu zamień obrazy. Lubię też używać CALayer dużo, co daje ci łatwe sposoby na generowanie ramek, masek, gradientów i promienia narożnika, a wszystko to również łatwo animowane.

Używanie w programie Interface Builder Dzięki Cocoa na pulpicie można było budować niestandardowe palety IB dla niestandardowych elementów sterujących. iOS nigdy nie miał takiej funkcjonalności i nie sądzę, że wtyczki IB są dostępne dla Xcode 4.

Dlatego obecnie jedynym sposobem obsługi niestandardowych podklas jest użycie pliku UIView w IB i ustawiając pole „Klasa niestandardowa” w Inspektor tożsamości do nazwy Twojej klasy niestandardowej.W ten sposób masz widok, który możesz rozmieścić i zmienić. W Interface Builder jest to po prostu prostokąt, podczas uruchamiania aplikacji XIB faktycznie deserializuje ten widok do Twojej niestandardowej klasy.

Podczas korzystania z UIControl otrzymujesz cel / mechanizm działania za darmo. Możesz więc połączyć zdarzenia dotyku z dowolnym obiektem w IB, tak jak w przypadku każdej innej standardowej kontrolki UIKit.

Jedna uwaga: jeśli masz niestandardowe - initWith....: selektory, te nie zostaną wywołane. Twoja klasa jest deserializowana z XIB, więc powinieneś użyć - initWithCoder:(NSCoder *)aDecoder; jako inicjalizacja.


1 dla odpowiedzi nr 2

Istnieje również kilka niestandardowych elementów sterujących http://www.cocoacontrols.com/platforms/ios/controls. Są open source, więc możesz pobrać źródło i grać z nimi.