拉伸UIButton的背景图像

Eug*_*kov 34 textures uibutton uiimage ios

我的纹理比我的UIButton短得多.

我有这个纹理:

在此输入图像描述

我应该创建这个按钮:

在此输入图像描述

我应该如何伸展(而不是平铺)这种纹理?沿水平方向拉伸

日Thnx

Dru*_*erB 70

从您提供的示例图像中我很确定您正在寻找UIImageresizableImageWithCapInsets:

UIImage *originalImage = [UIImage imageNamed:@"myImage.png"];
UIEdgeInsets insets = UIEdgeInsetsMake(top, left, bottom, right);
UIImage *stretchableImage = [originalImage resizableImageWithCapInsets:insets];
[myButton setBackgroundImage:stretchableImage forState:UIControlStateNormal];
// the image will be stretched to fill the button, if you resize it.
Run Code Online (Sandbox Code Playgroud)

UIEdgeInsets结构中的值确定您不希望拉伸的边距.你的左右值可以是这么宽:

在此输入图像描述

顶部和底部值可以是0(如果您不想垂直调整按钮的大小),或者可能是总高度的一半.

  • 可能不是你想要的答案,但我看到的最后估计是90%的iPhone至少运行iOS 5.0.iOS6在8天后已经有30%的渗透率.只是说,你可能会考虑改变你的目标,而不是试图将解决方案变成4.3. (3认同)
  • @drummerb你应该使用`setBackgroundImage:forState`而不是`setImage:forState`. (3认同)

Ant*_*nko 38

使用Xcode 6(和iOS7 +目标),您可以在处理图像资源时使用切片编辑器.使用编辑器 - >显示切片菜单切换切片模式或在使用编辑器选择特定图像时按下显示切片按钮(如下所示).

显示切片按钮

然后,您可以选择特定显示比例的图像并拖动规则或手动编辑插图值.

规则

之后,您可以在Interface Builder中UIButton 背景图像选择此图像(IB按钮的表示可能看起来很糟糕,但运行时应该没问题).

我的按钮看起来很好(运行iOS 7.1模拟器和iOS 8设备).

在此输入图像描述

这个Apple doc 链接可能会有所帮助.