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

Попытка сделать «стеклянную таблетку».iPhone stretchableImageWithLeftCapWidth только делает «D» s

Что делает «растяжка», если изображение больше ... и кнопка, которую я пытаюсь использовать на ... меньше?

Имеет ли изображение «растянуть» и «сжать»?

Причина, по которой я прошу ... потому, что все мои изображения в конечном итоге выглядят как форма «D».

Левая сторона квадратная и правая сторона закруглена.

Что бы D-форма сообщила вам, что я делаю неправильно? Слишком много .. или слишком мало ... "leftCap setting"? Слишком большое изображение?

ответ

54

Растяжимое изображение разделено на 9 частей, если оба leftCapWidth и отличные от нуля.

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

Центральные части всегда 1 точки в размерах, и это та часть, которая растягивается, например:

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

Чтобы создать кнопку «стеклянной таблетку», вы должны заполнить закругленное границы в области A, B, C и D выше и предоставить радиус этой таблетки как в leftCapWidth, так и в .


Кроме того, растяжение изображения не термоусадочные. Если вы пытаетесь использовать растягивающиеся изображения, большие, чем кнопки (или что-то еще), к которым вы хотите применить их, они могут отображаться некорректно (особенно для старых iOS).

+0

Значит, значение 0 означает «не растягивать ничего» или «равномерно растягиваться по всему изображению»? Я не вижу ничего, что могло бы вызвать проблему «D-образной формы». Я думаю, первое, что я должен сделать, это убедиться, что КАЖДОЕ изображение меньше КАЖДОЙ кнопки. (Если нет ... то что происходит?Изображение просто используется как «как есть»? И что будет с растягиванием шапки-значения, которое не произойдет?) – Susanna

+0

@Roberta: 0 означает «равномерно растягиваться по всему изображению». Если изображение меньше углов, они будут перекрываться друг с другом. – kennytm

+1

Иллюстрация действительно полезно. – nonamelive

3

stretchableImageWithLeftCapWidth не ведет себя так, как вы ожидали. Я предлагаю использовать свойство contentStretch UIView вместо этого, чтобы сэкономить некоторое разочарование.

FYI, путь stretchableImage ведет себя:

  • если вы уменьшить изображение, оно просто обрезает верхнюю и левую части изображения, а не протягивать ничего.
  • Если вы развернете изображение, оно расширит только столбец пикселей, расположенный под верхней крышкой, и строку пикселей справа от левой крышки. Это работает для очень простой графики, но будет неудобно для любой графики, которая имеет эффекты, такие как затенение или блеск.

contentStretch, с другой стороны, ведет себя так же, как и следовало ожидать. Графика в основном делится на 9 частей, которые расширяют AND CONTRACT, как объяснил Кенни.

Кроме того, не забывайте, что в любое время, когда вы растягиваете представление, его contentMode должен быть установлен в UIViewContentModeScaleToFill.

+0

Это неправда. Как пояснил @KennyTM, они НЕ ДОЛЖНЫ КОНТРАКТИТЬ: крышки не соблюдаются, если изображение нужно уменьшить. –

Смежные вопросы