Stare aplikacje w nowej rozdzielczości iPhone4
#1
Napisano 22 czerwca 2010 - 00:27
Widzę, że w UIScreen w iOS4 jest coś takiego:
scale
The natural scale factor associated with the screen. (read-only)
@property(nonatomic,readonly) CGFloat scale
Discussion
This value reflects the scale factor needed to convert from the default logical coordinate space into the device coordinate space of this screen. The default logical coordinate space is measured using points, where one point is approximately equal to 1/160th of an inch. If a device’s screen has a reasonably similar pixel density, the scale factor is typically set to 1.0 so that one point maps to one pixel. However, a screen with a significantly different pixel density may set this property to a higher value.
Availability
* Available in iPhone OS 4.0 and later.
Declared In
UIScreen.h
Opis nowego UIScreen jest tutaj.
#2
Napisano 22 czerwca 2010 - 00:43
#3
Napisano 22 czerwca 2010 - 01:03
#4
Napisano 22 czerwca 2010 - 02:46
#5
Napisano 22 czerwca 2010 - 07:44
Orientujesz się może czy ten sposób z @2x zadziała na iPadzie? Gdy aplikacja zostanie zainstalowana na iPadzie to który plik zostanie użyty: obrazek.png czy obrazek@2x.png?
Ja mam trochę więcej problemów, bo cały GUI robię sam. Niezależnie od komponentów/kontrolek iOS. Generalnie radzę sobie z różnymi rozdzielczościami, bo tego typu problemy są moimi problemami od lat (Java2ME i setki urządzeń). Ale w przypadku iPhone2/3 i 4 oraz iPada powstała trochę niejednoznaczna sytuacja. Przykład...
W iPhone3G mam sobie przycisk w postaci kwadracika 32x32 pixele. W iPadzie taki sam przycisk jest ok, bo chociaż ma większą rozdzielczość to ekran też ma większy więc PPI (pixel per inch) wychodzi podobnie i użytkownik widzi mniej więcej podobnej wielkości przycisk. No a jak taki sam przycisk 32x32 pixele narysuję na iPhone4, który ma ekran tej samej wielkości ale rozdzielczość 2x większą (sporo PPI) to użytkownik zobaczy przycisk zdecydowanie zbyt mały. Wobec tego powinienem posługiwać się raczej procentem rozmiarów ekranu niż konkretnymi wartościami (pixele). No ale nie na iPadzie, bo tam wtedy wszystko wyszłoby za duże. No i trochę mi się zaczyna kod dwoić.
W związku z tym mam pytanie. Czy mogę jakoś rozpoznać na czym została uruchomiona aplikacja? Zależy mi na odróżnieniu urządzeń 480x320 (iPhone2G/3G/3GS, iPod1/2/3) od iPada i od iPhone4. Mogę zrobić to trochę po lamersku rozpoznając po rozdzieczlości ekranu. Ale to naprawdę mało eleganckie. iPada mogę odróżnić też tak:
if( UIUserInterfaceIdiomPad == UI_USER_INTERFACE_IDIOM() )
{
// display iPad UI
}
else
{
// display iPhone/iPod touch UI
}
A mogę jakoś tak zindentyfikować iPhone4?
Najlepiej byłoby gdybm mógł się dostać do informacji ile DPI (czy raczej PPI) ma ekran urządzenia na którym została odpalona aplikacja. Wtedy mógłbym zrobić wszystko uniwersalnie i wszystko pięknie bym sobie poobliczał tak, że w przyszłości bez jakichkolwiek modyfikacji wszystko byłoby ok na każdej maszynie. A może jest taka możliwość?
#6
Napisano 22 czerwca 2010 - 11:11
#7
Napisano 22 czerwca 2010 - 11:37
Wraz ze wzrostem ilości różnych sprzętów, iPody, iPhone'y jest coraz mniejszy sens identyfikować urządzenie na którym aplikacja jest uruchomiona. Bardziej należy skupić się na sprawdzeniu jakie cechy są konieczne, lub czasami wykorzystywane na urządzeniach - kamerka, GPS itp. Wczoraj troszkę googlowania i wszystko bez problemu się udało znaleźć.
Masz 101% racji. Tylko tak należy robić. Jednak co zrobić gdy nie za bardzo da się sprawdzić PPI danego urządzenia i nie wiem czy duża rozdzielczość (1024x768 albo 960x640) jest na ekranie 3,5 cala czy prawie 10 cali. Przynajmniej ja nie potrafię tego sprawdzić. Gdybym tylko to wiedział to spokojnie mógłbym robić uniwersalne aplikacje nawet bez użycia ich kontrolek.
#8
Napisano 22 czerwca 2010 - 11:51
#9
Napisano 22 czerwca 2010 - 12:02
#10
Napisano 22 czerwca 2010 - 12:07
Zapomnij w ogóle o fakcie, że iPhone 4 ma rozdzielczość 960x640. Pliki XIB tak samo jak wczezśniej tworzone są dla rozdzielczości 480x320. Tekst jest automatycznie sam wygładzany, elementy interfejsu Apple tak samo wygładzane, jedynie co musisz przygotować (jeżeli chcesz) to drugą wersję obrazków z postfixem @2x.
Aaaa, czyli zwiększyli rozdzielczość ekranu, ale digitizera już nie? Pozycję kliknięcia i położenia obiektów wciąż określamy jak dla 480x320?
To rzeczywiście upraszcza sprawę.
Czyli wystarczy stary podział iPad/iPhone/iPod (wykrywany np. przez [UIDevice currentDevice].model) i dodatkowe grafiki @2x, tak?
#11
Napisano 22 czerwca 2010 - 12:21
Aaaa, czyli zwiększyli rozdzielczość ekranu, ale digitizera już nie? Pozycję kliknięcia i położenia obiektów wciąż określamy jak dla 480x320?
To rzeczywiście upraszcza sprawę.
Naprawdę tak jest? Czyli ja nie mogę kliknąć z dokładnością co do 1 pixela? Hmmm... dziwne. To może i upraszcza ale i zmniejsza możliwości. Trochę takie przejściowe rozwiązanie. I trochę niezbyt ładne.
#12
Napisano 22 czerwca 2010 - 12:39
Naprawdę tak jest? Czyli ja nie mogę kliknąć z dokładnością co do 1 pixela? Hmmm... dziwne. To może i upraszcza ale i zmniejsza możliwości. Trochę takie przejściowe rozwiązanie. I trochę niezbyt ładne.
W sumie to tylko gdybanie, sprawa wyjaśni się pewnie już niedługo.
Wygląda na to, że zachowując maksymalną kompatybilność ze starymi urządzeniami 480x320, zmienili tylko/aż jakość samej grafiki.
#13
Napisano 24 czerwca 2010 - 12:43
icon universal iphone ipad - Google Search
jako, że właśnie kończę projekt, mogę od razu potwierdzić informacje
w pliku [nazwaprojektu]-Info.plist dodajesz wpis o nazwie CFBundleIconFiles , autoamtycznie powinien zmienić się na tablicę o uproszczonej nazwie Icon files
dodajesz do niego 2 lub 3 wpisy wpisując dowolne nazwy swoich ikonek, u siebie mam Icon_iPad.png Icon_iPhone.png Icon_iPhone4.png . Nie ma różnicy w kolejności w jakiej je wpisujesz. System automatycznie wybierze tę dobrej rozdzielczości.
Jeżeli aplikacja może być uruchamiana na wcześniejszym sofcie niż SDK 3.2 możesz dodać jeszcze CFBundleIconFile z nazwą ikonki dla iPhonów/iPodów touch bo inne urządzenia nie będą mogły uruchomić tego softu.
Odpowiadając na poprzednie posty, które też bardzo można łatwo eksperymentalnie sprawdzić, tak wygląda identyfikacja współrzędnych dotyku na iPhonie 4:
2010-06-24 13:40:43.151 testtouch[45340:207] 303.000000x457.000000 2010-06-24 13:40:44.479 testtouch[45340:207] 303.500000x458.500000 2010-06-24 13:40:45.967 testtouch[45340:207] 304.500000x456.500000 2010-06-24 13:40:46.423 testtouch[45340:207] 304.500000x456.500000 2010-06-24 13:40:46.815 testtouch[45340:207] 304.500000x456.500000 2010-06-24 13:40:52.931 testtouch[45340:207] 319.500000x451.500000 2010-06-24 13:40:54.171 testtouch[45340:207] 316.000000x451.000000jest to mniej-więcej dolny prawy róg i jak widzimy w konsoli mamy raz na jakiś czas połówkowe wartości, których nigdy wcześniej nie było.
#14
Napisano 24 czerwca 2010 - 12:56
ale żeby developerzy google nie lubili...
Odpowiadając na poprzednie posty, które też bardzo można łatwo eksperymentalnie sprawdzić, tak wygląda identyfikacja współrzędnych dotyku na iPhonie 4:
2010-06-24 13:40:43.151 testtouch[45340:207] 303.000000x457.000000 2010-06-24 13:40:44.479 testtouch[45340:207] 303.500000x458.500000 2010-06-24 13:40:45.967 testtouch[45340:207] 304.500000x456.500000 2010-06-24 13:40:46.423 testtouch[45340:207] 304.500000x456.500000 2010-06-24 13:40:46.815 testtouch[45340:207] 304.500000x456.500000 2010-06-24 13:40:52.931 testtouch[45340:207] 319.500000x451.500000 2010-06-24 13:40:54.171 testtouch[45340:207] 316.000000x451.000000jest to mniej-więcej dolny prawy róg i jak widzimy w konsoli mamy raz na jakiś czas połówkowe wartości, których nigdy wcześniej nie było.
Wielkie dzięki za ten test! Ja niestety od trzech dni próbuję zrobić update mojego iPhone3G do iOS4 i ciągle nie mogę skończyć archiwizacji (nawet 6.5 godziny już czekałem).
Połówkowe wartości? Hmmmm... ale kombinują. No to ciekawe co mi wyświetli jak sprawdzę wysokość i szerokość ekranu. Trochę to dziwne. Nigdy się z czymś takim w jakichkolwiek innych urządzeniach mobilnych nie spotkałem. Ech...
No ale dzięki temu chyba wszystkie istniejące aplikacje będą ok na iPhone4. Zobaczymy...
#15
Napisano 24 czerwca 2010 - 13:15
Test wykonany na Symulatorze. Nie mam (jeszcze) iPhone 4. Na Twoim iPhonie 3G, czy jakiekolwiek inne urządzenie masz Apple, które nie jest najnowszym iPhonem, nigdy *,5 nie uzyskasz jeżeli chodzi o dotyk.Wielkie dzięki za ten test! Ja niestety od trzech dni próbuję zrobić update mojego iPhone3G do iOS4 i ciągle nie mogę skończyć archiwizacji (nawet 6.5 godziny już czekałem).
Nie wiem czemu narzekacie na sam fakt, że Apple rozwiązało to w ten sposób. Wg mnie rozwiązanie jest genialne. Przede wszystkim developerzy, którzy zrobili już aplikację i jest ona w App Store a jest ich tam ćwierć miliona, (dobrze pamiętam z WWDC?) i np. nie ustawiliby, że Tabela ma automatycznie poszerzać się w pionie i poziomie, otrzymali by dwa razy mniejszą tabelę umieszczoną w górnym lewym rogu ekranu z pustą przestrzenią w 3 pozostałych ćwiartkach. Ale to tylko jest niedopatrzenie i ukłon w stronę programistów. Tak samo w przypadku domyślny infobuttona bez poszerzenia jego ramki dotyku zmniejszyłby się dwukrotnie (czterokrotnie jeżeli chodzi o pole powierzchni) byłoby nie lada wyczynem "trafienie w niego".
Z drugiej strony rozdzielczość na iPhonie 4 jest taka wielka, że nawet symulator iPhone aby człowiek widział różnice w grafice jest rozmiarem taki sam jak symulator iPada. Wątpie aby ktokolwiek z Was miał monitor o takiej gęstości px. Zmiana rozdzielczości w iPhonie 4.0 raczej nie ma na celu budowania bardziej zaawansowanych aplikacji, a bardziej przejrzystych, ładniejszych, łagodniejsze, wyraźniejsze dla oka.
Ekran dotykowy w iPhonie wciąż pozostaje ekranem dotykowym niezależnie czy mamy model 3G czy 4. Nasze palce pozostają tego samego rozmiaru więc nasze "manualne możliwości" korzystania z iPhone pozostają takie same.
Owszem, mamy rozdzielczość 640x960 zamiast 320x480, ale wciąż dysponujemy ekranem o takim samym rozmiarze 3.5". Nie upchniemy na nim więcej przycisków.
Prawdę mówiąc sam się aż bałem, że mogą zmienić rozdzielczość iPhone 2x i rozwiązać to w ten sposób, który chcielibyście uznać za słuszny, ale odetchnąłem kiedy zrozumiałem jak to działa.
Tyle jeżeli chodzi o przyciski, jednak, jeżeli rysujemy na iPhonie palcem, tak jak przedstawiłem mamy połówkowe wartości dzięki czemu nasze krawędzie będą bardziej dokładne.
Wszystko, czy coś trzeba sprostować?
#16
Napisano 24 czerwca 2010 - 13:27
Wszystko, czy coś trzeba sprostować?
Wszystko jasne. Jestem Ci niezmiernie wdzięczny za sprawdzenie. Ja jestem akurat w trakcie przerabiania swojej gierki na dużą rozdzielczość. No ale z tego co widzę dzięki rozwiązaniu Apple nie muszę tego robić. Dłużej się zastanowiłem i naprawdę to wszystko zadziała (przypominam, że wszystko rysuję sam w OpenGL i nie korzystam z kontrolek/GUI). Im dłużej o tym myślę (w świetle przyszłych urządzeń o jeszcze innej rozdzielczości) tym bardziej mi się to rozwiązanie podoba. Jeszcze się wstrzymam przed użyciem określenia "genialne" ale naprawdę zaczyna mi się podobać.
Trochę marudziłem, bo jestem przyzwyczajony do tego co robi cały świat, czyli normalnej zmiany rozdzielczości. Ale to kurcze... jest chyba fajne. Dlaczego to zawsze Apple wpada na genialne pomysły?
Dzięki raz jeszcze!
#17
Napisano 24 czerwca 2010 - 13:30
żeby użytkownicy wykop.pl śmiali się jakimi to jesteśmy leszczami, że zapłaciliśmy 3 razy tyle za sprzęt, żeby się lansować i być uważany za kozaka, mimo, że oni mają to samo w swoich PC tylko data premiery późniejsza .Dlaczego to zawsze Apple wpada na genialne pomysły?
#18
Napisano 28 czerwca 2010 - 07:15
#19
Napisano 29 czerwca 2010 - 07:36
#20
Napisano 29 czerwca 2010 - 07:45
@MDW jak pewnie już wiesz ja z OpenGL nie mam nic wspólnego. Co ciekawe, OpenGL to nie jest kwestia programowania w Objective-C a C/C++, prawda?
Raczej tylko C (nie C++). OpenGL jest ciągle oparty na starej nieobiektowej filozofii i jest to po prostu wywoływanie prostych funkcji jak w klasycznym C. Nawet w Javie (np. Android) jest to tak samo zrobione tylko, że te funkcje są po prostu metodami jakiejś klasy GL. No a czystego C można używać w kodzie Objective-C bez żadnych tricków. Zresztą OpenGL używa się w iOS tak samo jak OpenAL.
Na 100% tak dzieje się w przypadku obrazków, bo już to sprawdziłem.
No tak, obrazek w dobrej rozdziałce się wczyta na iPhone4, ale sam trójkąt zostanie narysowany w gorszej rozdzielczości. Przynajmniej w symulatorze. Dziwne to jest.
#21
Napisano 30 czerwca 2010 - 07:47
Rozumiem to, że jak się zrobi dwa razy większą teksturę do nazwy doda "@2x" to na maszynach z dużą rozdzielczością zostanie ona wczytana zamiast tej standardowej.
Nie wiem jak wczytujesz teksturę, ale jeżeli tak jak na (większości) przykładów dostępnych w sieci, tj. załadować teksturę z pliku/resources i przekopiować ją do przygotowanego bufora OpenGL, to ciekawi mnie czy ta sztuczka z "@2x" zadziała. Wydawało mi się, że to chyba dotyczy tylko Cococa i xib. To by wyjaśniało dlaczego przy zoom 100% nadal jest stara rozdzielczość. Nie sprawdzałem tego jeszcze, no i nie wiem jak wczytujesz bitmapę ;-)
#22
Napisano 30 czerwca 2010 - 08:27
Nie wiem jak wczytujesz teksturę, ale jeżeli tak jak na (większości) przykładów dostępnych w sieci, tj. załadować teksturę z pliku/resources i przekopiować ją do przygotowanego bufora OpenGL, to ciekawi mnie czy ta sztuczka z "@2x" zadziała. Wydawało mi się, że to chyba dotyczy tylko Cococa i xib. To by wyjaśniało dlaczego przy zoom 100% nadal jest stara rozdzielczość. Nie sprawdzałem tego jeszcze, no i nie wiem jak wczytujesz bitmapę ;-)
No to na razie zapomnijmy o teksturze. Załóżmy, że rysuję przy pomocy funkcji OpenGL zwykłe nieteksturowane linie (druciaki). One też są w starej rozdzielczości. Nie widzę możliwości narysowania linii w rozdzielczości 960x640.
#23
Napisano 30 czerwca 2010 - 20:04
Na 100% tak dzieje się w przypadku obrazków, bo już to sprawdziłem.
To ja zapytam jeszcze o jeden szczegół, może ktoś przetestował. Czy "@2x" zadziała nawet jeżeli aplikacja powstanie w SDK 3.2.2 z "deployment target 3.0"?
Chciałbym zachować obsługę 3.0, ale nie mam jak sprawdzić, czy iP4 mimo to załaduje odpowiednie pliki (są wrzucone do Library).
A może ktoś tutaj jest już szczęśliwym posiadaczem iP4?
#24
Napisano 01 lipca 2010 - 12:09
#25
Napisano 01 lipca 2010 - 12:48
Co do rozdzielczości w OpenGL, widziałem odpowiedni podrozdział w nowym Developer's Guide chyba (przekopywałem się przez różną dokumentację i nie pamiętam na 100%).
Masz rację. Wczoraj właśnie trafiłem na rozdział "Drawing High-Resolution Content Using OpenGL ES" w nowym iPhone Application Programming Guide. Jest tam wszystko wyjaśnione chyba wystarczająco dokładnie. Na razie jednak wolę nie ruszać tak dużej rozdziałki, bo trudno mi przewidzieć jaka będzie prędkość. I tak mam stracha o iPada, który w końcu ma nawet jeszcze trochę większą rozdzielczość niż iPhone4. Muszę gdzieś skombinować iPada do sprawdzenia. Ale to nie jest takie proste...
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych