Czy jest 9-patch loader dla iPhone ' a?

Android ma ładny sposób definiowania rozciągliwych obrazów zwanych dziewięciopasek. Zobacz te dokumenty dla opisu koncepcji. Chodzi o to, aby otoczyć obraz png 1-pikselową obwódką, w której można zdefiniować rozciągliwe obszary i wymiary wypełnienia obrazu. To jest absolutnie genialne i chciałbym wykorzystać ten pomysł w mojej aplikacji na iPhone ' a. Przed napisaniem własnego 9-patcha do UIImage loader pomyślałem, że zobaczę czy już istnieje. Google nie wraca żadnych rezultatów, więc nie mam wiele nadziei, ale nie zaszkodzi zapytać, prawda? :-)

EDIT: Ludzie, doceniam odpowiedzi, ale wiem o stretchableImageWithLeftCapWidth.... Szukam kodu, który przyjmuje ścieżkę @"foo.9.png" i zwraca rozciągliwy UIImage. Ten kod bez wątpienia będzie używał stretchableImageWithLeftCapWidth... wewnętrznie. Jestem pewien, że sam mógłbym napisać kod za pomocą tej metody. Ale pytam, czy ktoś już to zrobił.

Author: Nikhil, 2009-07-16

4 answers

Otrzymałem e - mail od oprogramowania Tortuga22, który poinformował mnie, że stworzyli taką bibliotekę i udostępnili ją na licencji Apache:

Ogłoszenie: http://blog.tortuga22.com/2010/05/31/announcing-tortuga-22-ninepatch/

Kod źródłowy: http://github.com/tortuga22/Tortuga22-NinePatch

Przykładowe użycie:

// loads-and-caches ninepatch and rendered image of requested size
UIImage buttonImg = [TUNinePatchCache imageOfSize:buttonSize 
                                forNinePatchNamed:@"buttonNormalBackground"];
[self.buttonNeedingBackground setImage:buttonImg
                       forControlState:UIControlStateNormal];
 25
Author: n8gray,
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-06-04 17:46:58

Spójrz również na właściwość contentStretch UIView. Jest bardziej wytrzymały i dobrze zachowujący się niż rozciągliwy obraz z prędkością światła. Zasadniczo działa, po prostu definiując rozciągliwy prostokąt w obrazie i automatycznie tworząc skalowaną dziewięć łat. Ten wewnętrzny prostokąt może być wszystkim - nie musi nawet znajdować się na środku obrazu. Plus w przeciwieństwie do stretchableImage ta metoda poprawnie zmniejszy grafikę i zachowa się zgodnie z oczekiwaniami w przypadku grafiki z oświetleniem lub połyskiem. I can ' t think każdej aplikacji w świecie rzeczywistym, w której chciałbyś czegoś więcej.

 4
Author: Rolf Hendriks,
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-08-13 15:53:28

Tak UIImage obsługuje coś takiego. Zobacz

- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight i dokumentacja dla leftCapWidth i topCapHeight

Zasadniczo obraz nie jest rozciągnięty w obszarze levercapwidth pikseli od lewej i prawej krawędzi i topCapHeight pikseli od góry i dołu. Gdy obraz jest skalowany, obszar wewnątrz tych granic jest rozciągany.

 3
Author: Harald Scheirich,
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
2009-07-16 02:32:39

Wszystkie UIImage obrazy wspierają to natywnie. Domyślnie całe obrazy są rozciągliwe, ale można ustawić caps za pomocą właściwości leftCapWidth i topCapHeight lub wygenerować je z istniejącego UIImage za pomocą metody - (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight.

Należy pamiętać, że w implementacji apple, gdy ustawisz jedną lub obie z tych wartości, rozciągliwy obszar jest zmuszony do jednego piksela wysoki / szeroki.

 1
Author: Carl Coryell-Martin,
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
2009-08-23 14:47:26