2011-08-08 5 views
9

Po prostu napisałem absolutnie znakomitą, doskonale zaprojektowaną aplikację na iPhone, która będzie tak bogata, będę zalany łodziami pontonowymi i modelami kostiumów kąpielowych oraz helikopterów. Chcę zarobić jeszcze więcej, zamieniając go na uniwersalną aplikację na iPada i iPhone'a.Dobre praktyki w projektowaniu uniwersalnych aplikacji (iPad/iPhone)

Teraz, kiedy to robię i jestem leniwym programistą, próbuję zmaksymalizować ponowne wykorzystanie kodu, który już napisałem, stwierdzam, że mogę ponownie wykorzystać większość z nich - na pewno cały model - - ale zawsze jest coś, co muszę zmodyfikować na klasie kontrolera. Albo, jest ciągłe sprawdzanie na UI_USER_INTERFACE_IDIOM(), które wydaje mi się jak zapach kodu.

W tym samym czasie uważam, że wersja na iPada nie powinna być wersją na iPhone'a. Dla większości przypadków z pewnością jest to uzasadnione, ale będą miejsca, w których chcesz ponownie użyć okna dialogowego lub całej hierarchii widoków.

Pytam społeczność. Jakie są dobre praktyki, aby zapewnić, że moja aplikacja będzie uniwersalna przy minimalnych zmianach?

Odpowiedz

5

Zakładając, że następuje wzorca MVC, M jest oczywiście dzielone między iPhone i iPad (i większość relacji M⇔C zbyt).

Różne UI oznaczają różne V i różne V⇔C.

Kilka pomysłów:

  • Jeśli jesteś w konstruktorze Interface, użyć 1 stalówkę dla iPhone UI i inny dla iPada.

  • Dobrze zapoznaj się z automatyczną maską autouzyskiwania. Przy prawidłowej wartości często pozbędziesz się dużej części kodu układu widoku.

  • W miarę możliwości nie używaj wartości bezwzględnych podczas ręcznego pozycjonowania widoków lub rysowania widoków niestandardowych. myView.frame = CGRectMake(0,0, 320, 480) może nie działać dobrze na przykład na iPadzie.

  • Jeśli masz cel rozwojowy przynajmniej iOS 3.2, przyrostek swoich urządzeń specyficznych zasobów z ~ipad lub ~iphone. Będziesz mógł je uzyskać, używając ich nazwy ogólnej.

Przykład:
Z AwesomeView~ipad.xib i AwesomeView~iphone.xib, można napisać [[AwesomeViewController alloc] initWithNibName:@"AwesomeView" bundle:nil].
samo dla obrazów (foo~ipad.png i foo~iphone.png, następnie [UIImage imageName:@"foo"])

Jestem całkiem pewien, że większość z tych punktów są oczywiste, ale oni byli dość oszczędność czasu dla mnie.

2

To, co odkryłem, to fakt, że w przypadku tej samej aplikacji uzyskuję znacznie inne interfejsy dla iPhone'a i iPada. Różnica w nieruchomościach ekranowych i innych aspektach naprawdę wymaga różnych podejść. Jeśli nic innego, nie mam mniej oddzielnych widoków (ekranów) na iPada niż na iPhone'a. (Chciałbym przy okazji jeździć helikopterem).

+1

Obawiam się, że aplikacja Universal jest w rzeczywistości dwiema aplikacjami włożonymi w jedną, tylko z modelem, który staje się koszmarem utrzymania. – ageektrapped

Powiązane problemy