2010-05-27 5 views
9
UIImage *aImage = [[UIImage imageNamed:@"Gray_Button.png"] stretchableImageWithLeftCapWidth:25 topCapHeight:0]; 

Próbuje zrobić "szklany przycisk pigułki".iPhone stretchableImageWithLeftCapWidth wykonuje tylko "D"

Co robi "rozciąganie", jeśli obraz jest większy ... a przycisk, którego próbuję użyć na ... jest mniejszy?

Czy obraz się "rozciąga" i "kurczy się"?

Powodem, dla którego pytam ... jest to, że wszystkie moje obrazy wyglądają jak kształt litery "D".

Lewa strona jest podniesiona do kwadratu ... a prawa strona jest zaokrąglona.

Co miałoby litery D powiedzieć, że robię źle? Za dużo ... lub za mało ... "Ustawienie leftCap"? Zbyt duży obraz?

Odpowiedz

54

Rozciągliwy obraz jest podzielony na 9 części, jeśli oba leftCapWidth i są niezerowe.

 leftCapWidth 
     <-----> 
     +--------------+^
     |  | |  | | 
     | A | | B | | topCapHeight 
     |-----+·+------| v 
     |-----+·+------| 
     | C | | D | 
     |  | |  | 
     +--------------+ 

Części centralne są zawsze 1 px wielkości, i jest to część, która jest rozciągnięta, na przykład:

 leftCapWidth (constant!) 
     <-----> 
     +------------------+^
     |  |  |  | | 
     | A |  | B | | topCapHeight (constant!) 
    v |-----+ - - +------| v 
    | |  .  .  | 
    | |  .  .  | 
    ^|-----+ - - +------| 
     | C |  | D | 
     |  |  |  | 
     +------------------+ 
      >-----< 
     stretched region 

Aby utworzyć przycisk „pigułka szkło”, należy wypełnić zaokrąglony granice do regionów A, B, C i D powyżej i dostarczają promień tej pigułki zarówno do leftCapWidth i .


Również rozciągliwy obraz jest nie termokurczliwych. Jeśli spróbujesz użyć rozciągliwych obrazów większych niż przyciski (lub cokolwiek innego), do których chcesz je zastosować, mogą być renderowane niepoprawnie (szczególnie w starszych wersjach systemu iOS).

+0

Tak więc wartość 0 oznaczałaby "nie rozciągaj niczego" lub "rozciągaj równomiernie na całym obrazie"? Nie widzę niczego, co mogłoby spowodować problem w kształcie litery "D". Myślę, że pierwszą rzeczą, którą powinienem zrobić, to upewnić się, że KAŻDY obraz jest mniejszy niż KAŻDEGO przycisku. (Jeśli nie ... to co się stanie?Obraz jest używany w rozmiarze "tak jak jest"? A co stanie się z wartością szczytową, która się nie stanie?) – Susanna

+0

@Roberta: 0 oznacza "rozciągnij równomiernie na całym obrazie". Jeśli obraz jest mniejszy niż narożniki będą się nakładać na siebie. – kennytm

+1

Ilustracja jest bardzo pomocna. – nonamelive

3

stretchableImageWithLeftCapWidth nie zachowuje się tak, jak można się spodziewać. Proponuję zamiast tego użyć właściwości contentStretch UIView, aby zaoszczędzić sobie frustracji.

FYI, sposób stretchableImage zachowuje się:

  • jeśli zmniejszyć obraz, to właśnie zaciski górne i lewych części obrazu zamiast rozciągania czegokolwiek.
  • Po rozwinięciu obrazu zostanie rozwinięta tylko kolumna pikseli tuż pod górną pokrywką i rząd pikseli po prawej stronie lewej nasadki. Działa to dla bardzo prostej grafiki, ale będzie wyglądać niezręcznie dla każdej grafiki, która ma efekty, takie jak cieniowanie lub połysk.

contentStretch, z drugiej strony, zachowuje się tak, jak można się spodziewać. Grafika zasadniczo dzieli się na 9 części, które rozszerzają ORAZ UMOWY, tak jak wyjaśnił Kenny.

Nie zapominaj również, że za każdym razem, gdy rozciągasz widok, jego zawartość powinna być ustawiona na UIViewContentModeScaleToFill.

+0

To nie jest prawda. Jak wyjaśnił @KennyTM, nie zawierają one KONTRAKTU: czapki nie są przestrzegane, jeśli obraz musi zostać zmniejszony. –