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 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!
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.
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
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