9
UIImage *aImage = [[UIImage imageNamed:@"Gray_Button.png"] stretchableImageWithLeftCapWidth:25 topCapHeight:0];

试图制作一个“玻璃药丸按钮”。

如果图像更大......并且我试图使用它的按钮......更小,“拉伸”会做什么?

图像是否“拉伸”和“收缩”?

我问的原因......是因为我所有的图像最终看起来都像“D”形。

左边是方形的……右边是圆形的。

D 形会告诉你我做错了什么?太多……或太少……“leftCap 设置”?图片太大?

4

2 回答 2

54

一个可拉伸的图像被分成 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 中,并将该药丸的半径提供给leftCapWidthtopCapHeight


此外,可拉伸图像不可收缩。如果您尝试使用比您想要应用的按钮(或其他任何东西)更大的可拉伸图像,它们可能会被错误地渲染(尤其是在较旧的 iOS 上)。

于 2010-05-27T20:16:35.113 回答
3

stretchableImageWithLeftCapWidth 的行为与您预期的不同。我建议使用 UIView 的 contentStretch 属性来节省一些挫败感。

仅供参考,stretchableImage 的行为方式是:

  • 如果缩小图像,它只会剪切图像的顶部和左侧部分,而不是拉伸任何东西。
  • 如果您扩展图像,它将仅扩展顶盖下方的像素列和左盖右侧的像素行。这适用于非常简单的图形,但对于任何具有阴影或光泽等效果的图形都会显得很尴尬。

另一方面,contentStretch 的行为与您预期的一样。该图形基本上分为 9 个部分,按照 Kenny 解释的方式展开和收缩。

另外,不要忘记,无论何时拉伸视图,它的 contentMode 都应该设置为 UIViewContentModeScaleToFill。

于 2010-08-13T15:27:11.877 回答