Obrazy dla iphone 5 wyświetlacz retina

IPhone 5 wydany, z nowym rozmiarem i rozdzielczością ekranu.

Kiedy używaliśmy obrazów dla iPhone ' a 4 (retina), dodaliśmy "@2x " do nazwy obrazu. Czy ktoś może mi powiedzieć, czy można dodawać różne obrazy (tła, przyciski itp.) na nowy ekran iPhone ' a?

I drugie pytanie: Czy Mogę mieć w swojej aplikacji osobne pliki XIB: dla iPhone 'a starego, iPhone' a nowego (jak dla iPhone ' a i iPada)?

Dziękuję!

Author: Andrey, 2012-09-21

5 answers

Oto wyjatek z mojego bloga na ten temat:

[UIImage imageNamed:] automatycznie ładuje @2x wersje obrazów podczas pracy na urządzeniu siatkówki. Niestety, imageNamed: nie ładuje się automatycznie-568h@2x wersji obrazów, gdy działa na iPhone 5.

Czasami to nie ma znaczenia, na przykład ikony i grafika nie pełnoekranowa są prawdopodobnie takie same na iPhone 4 i 5. Jeśli jednak masz pełnoekranowe obrazy tła lub tło o pełnej szerokości / wysokości obrazy dla pasków narzędzi itp będziesz miał problemy. Twoje obrazy o wysokości 480 najprawdopodobniej zostaną rozciągnięte (i prawdopodobnie będą wyglądać okropnie w rezultacie).

Możesz ręcznie sprawdzić rozmiar ekranu i załadować odpowiedni obraz w następujący sposób:

UIImage* myImage;
CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
if ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f) {
   myImage = [UIImage imageNamed:@"myImage-568h.png"];
} else {
   myImage = [UIImage imageNamed:@"myImage.png"];
}

Istnieje sposób na zmianę nazwy interfejsu użytkownika, aby automatycznie załadował odpowiedni obraz. Zobacz link poniżej, aby uzyskać szczegółowe informacje.

Więcej na: http://pervasivecode.blogspot.co.uk/2012/09/making-apps-work-on-iphone-5-screen-size.html

EDIT: @ Sound Blaster & @GrizzlyNetch are right, w kodzie należy użyć imageNamed:@ "myImage-568h. png"] ale rzeczywista nazwa pliku powinna być [email protected]. Jeśli tego nie zrobisz, skala jest nieprawidłowa, tak jak mówili.

 50
Author: Ben Clayton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-15 20:37:10

IPhone 5 nie wprowadza nowej gęstości pikseli, więc możesz po prostu użyć wszystkich obrazów siatkówki, których wcześniej używałeś.

Wszystko, czego potrzebujesz, aby obsługiwać nową rozdzielczość iPhone ' a 5, to sprawić, że widoki pojawią się w oknie. W przypadku większości widoków, takich jak tableview i scrollview, nie będzie to powodować żadnych problemów.

Nie ma również potrzeby dodawania dodatkowych plików XIB dla nowej rozdzielczości, która również nie jest obsługiwana.

Wystarczy dodać [email protected] do pakietu aplikacji, aby iOS 6 sprawił, że aplikacja zajmuje dodatkowe miejsce dostępne w iPhone 5.

Wszystkie natywne kontrolki, takie jak pasek kart, będą zachowywać się tak, jak byś się spodziewał.

Jeśli chcesz wspierać iOS4. 3 i 5.* w aplikacji upewnij się, że Use Autolayout w ustawieniu nib (pierwsza karta w interface builder) jest wyłączona.

Następnie upewnij się, że poprawnie skonfigurowałeś widok autoresizingMask

 11
Author: rckoenes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-01 20:34:06

If ([uiscreen mainScreen].skala = = 2.f & & screenHeight = = 568.0 f) Dokładne porównywanie liczb zmiennoprzecinkowych nie jest dobrym pomysłem w żadnym języku ze względu na błędy zaokrąglania w sposobie ich przechowywania w pamięci. Na przykład nie można zagwarantować, że 568.0 f nie będzie przechowywany jako 567.9999999 lub 568.0000001. Znacznie bezpieczniej jest użyć zasięgu, lub w tym przypadku wystarczy screenHeight > 567.1 f. podejrzewam, że nawet iPhone nie obsługuje fizycznie ułamków pikseli.

 1
Author: user1989656,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-18 08:06:53

EDIT

Uważaj, od iOS8 uiscreen weź pod uwagę orientację (sprawdzanie wysokości może zwrócić dwie wartości, wysokość pionowa lub wysokość pozioma, zanim była to tylko wysokość pionowa), ale xcassets są lepsze możesz to sprawdzić tutaj : Jak dodać tło iphone ' a?

END EDIT

Na podstawie odpowiedzi Bena-Claytona zrobiłem przydatną kategorię do zarządzania obrazem dla iPhone ' a 5. Dzięki.

+ (UIImage *) imageForName:(NSString *)imageName
{
    NSString *result = imageName;

    CGFloat screenHeight = [UIScreen mainScreen].bounds.size.height;
    BOOL isIphoneFive = ([UIScreen mainScreen].scale == 2.f && screenHeight == 568.0f);

    if (isIphoneFive)
    {
        NSString *imageNameWithoutExtension = [imageName stringByDeletingPathExtension];
        NSString *extension = [imageName pathExtension];

        result = [NSString stringWithFormat:@"%@-568h.%@",imageNameWithoutExtension, extension];
    }

    return [UIImage imageNamed:result];
}
 1
Author: Boris Charpentier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:11:12

Obecnie wykrywam, czy obecne urządzenie to iPhone 4" w ten sposób i działa świetnie. hth

- (BOOL)isiPhone5{
    return ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 568.0);
}
 0
Author: link82,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-11 22:47:01