Wyświetlacz Retina i [UIImage initWithData]

Muszę zainicjować obrazy z surowych danych pobranych z serwera, który zapewnia prawidłowy rozmiar obrazu w zależności od typu klienta iPhone ' a.

Wiem, że powinienem ustawić wartość skali na 2.0 na wyświetlaczu 640x960, jednak jest to właściwość readonly i nie może być ustawiona podczas init przy użyciu initWithData.

Jakieś pomysły?

Author: Sam, 2010-07-20

6 answers

Nie wiem nic, co można wgrać w dane obrazu, aby powiedzieć telefonowi, że jest to obraz @2x, ale coś takiego powinno działać:

UIImage * img = ...;
img = [UIImage imageWithCGImage:img.CGImage scale:2 orientation:img.imageOrientation];
 93
Author: tc.,
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
2010-07-20 11:24:29

Ponieważ iOS 6.0 UIImage mA metodę + imageWithData:scale:, możesz przekazać 2.0 jako skalę dla siatkówki.

 19
Author: Dennis Krut,
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-12-05 13:42:50

Możesz przekazać [[UIScreen mainScreen] scale] jako parametr skali zamiast 2.0f.

 7
Author: Phil Loden,
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-07-01 20:26:42

Swift3, 4 Wersja

let image = UIImage(data: imageData, scale: UIScreen.main.scale)
 0
Author: allen huang,
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
2018-03-29 07:49:24

Włóż to do swojego .m jeśli chcesz lub na zaimportowanej klasie (składnia c jest ładniejsza podczas wywoływania funkcji IMAO)

BOOL isRetina(){
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        return [[UIScreen mainScreen] scale] == 2.0;
    }
    return NO;
}

Następnie podczas tworzenia obrazu z danymi serwera:

[UIImage imageWithData:dataFromServer scale:isRetina()?2:1];
 -1
Author: user2387149,
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
2014-02-19 10:42:45

AFAIK nie musisz sam ustawiać wartości skali. System operacyjny będzie obsługiwać punkty do tłumaczenia pikseli dla Ciebie.

 -4
Author: Rengers,
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
2010-07-20 11:16:08