iPhone stretchableImageWithLeftCapWidth только делает "D" s - PullRequest
9 голосов
/ 27 мая 2010
UIImage *aImage = [[UIImage imageNamed:@"Gray_Button.png"] stretchableImageWithLeftCapWidth:25 topCapHeight:0];

Попытка сделать "стеклянную таблетку".

Что значит "растянуть", если изображение больше ... и кнопка, на которой я пытаюсь его использовать ... меньше?

Изображение растягивается и сжимается?

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

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

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

Ответы [ 2 ]

54 голосов
/ 28 мая 2010

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

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

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

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

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


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

3 голосов
/ 13 августа 2010

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

К вашему сведению, как ведет себя растягиваемое изображение:

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

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

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

...