Jak działa UIEdgeInsetsMake?

Robię aplikację, w której używam UIEdgeInsetsMake dla resizableImageWithCapInsets, ale nie rozumiem jak to dokładnie działa, UIEdgeInsetsMake mA 4 argumenty:

  • Top
  • Left
  • Bottom
  • Prawo
[[3]}ale to pływaki, więc nie wiem jak ustawić to na obrazek, dzięki! : D
Author: Alexander Mistakidis, 2011-10-02

3 answers

Zgodnie z dokumentacją:

Można użyć tej metody, aby dodać wkładki cap do obrazu lub zmienić istniejące wkładki cap obrazu. W obu przypadkach odzyskujesz nowy obraz, a oryginalny obraz pozostaje nietknięty.

Podczas skalowania lub zmiany rozmiaru obrazu obszary objęte nakładką nie są skalowane ani zmieniane. Zamiast tego obszar pikseli, który nie jest zakryty przez nasadkę w każdym kierunku, jest kafelkowany od lewej do prawej i od góry do dołu, aby zmienić rozmiar obrazu. Technika ta jest często służy do tworzenia przycisków o zmiennej szerokości, które zachowują te same zaokrąglone rogi, ale których obszar środkowy rośnie lub kurczy się w razie potrzeby. Aby uzyskać najlepszą wydajność, użyj kafelkowego obszaru o rozmiarze 1x1 pikseli.

Więc wystarczy użyć ilości pikseli, które chcemy zrobić nieciągłymi w wartościach funkcji UIEdgeInsetsMake.

Powiedzmy, że masz obraz 21x50 punktów (21x50 pikseli w standardowej rozdzielczości, 42x100 pikseli w rozdzielczości Retina "@2x") i chcesz, aby ten obraz był poziomo rozciągliwy, zachowując 10 punktów po lewej i po prawej stronie nietknięte podczas rozciągania obrazu, ale tylko rozciągnąć 1-punktowe szerokie pasmo w środku. Następnie użyjesz UIEdgeInsetsMake(0,10,0,10).

Nie przejmuj się, że są to pływaki (jest to przydatne na przykład przy zmianie rozmiaru subpikseli, ale w praktyce prawdopodobnie będziesz używał tylko liczb całkowitych (lub pływaków bez części dziesiętnych)

Bądź ostrożny, jest to metoda tylko iOS5+, niedostępna przed iOS5. Jeśli używasz pre-IOS5 SDK, użyj stretchableImageWithLeftCapWidth:topCapHeight: zamiast tego.


[EDIT] jakaś wskazówka używam od jakiegoś czasu, ponieważ nigdy nie pamiętam, w jakiej kolejności są pola struktury UIEdgeInsets - i w jakiej kolejności mamy przekazać argumenty do UIEdgeInsetsMake funkcji - wolę używać składni "descrigned inits" w następujący sposób:

UIEdgeInsets insets = { .left = 50, .right = 50, .top = 10, .bottom = 10 };

Lub gdy potrzebna jest wyraźna Obsada:

UIImage* rzImg = [image resizableImageWithCapInsets:(UIEdgeInsets){
   .left = 50, .right = 50,
   .top = 10, .bottom = 10
}];

Uważam, że jest bardziej czytelny, zwłaszcza, aby upewnić się, że nie mieszamy różnych granic/kierunków!

 69
Author: AliSoftware,
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
2016-05-16 22:26:44

Ale to pływaki więc nie wiem jak ustawić to na obrazek

Jest to metoda instancji UIImage. Tak więc sposób, w jaki używasz resizableImageWithCapInsets do tworzenia obrazu, polega na wysłaniu tej wiadomości do obrazu (UIImage).

Fajna nowa funkcja: zauważ, że jeśli wszystkie wstawki krawędzi są zerowe, obraz zostanie wyłożony kafelkami. Działa to jako tło dla wszystkiego, co akceptuje obraz tła. Działa nawet w UIImageView.

 10
Author: matt,
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
2011-11-02 16:42:04

Właśnie przejrzałem ten artykuł, który wyczyścił całą moją koncepcję dotyczącą UIEdgeInsetsMake

IOS: Jak zrobić rozciągliwy przycisk z UIEdgeInsetsMake

 3
Author: Azhar,
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-03-04 13:46:09