我的纹理比我的UIButton短得多。
我有这个纹理:
我应该创建这个按钮:
我应该如何拉伸(不是瓷砖),这种质地?沿水平方向拉伸
日Thnx
答案 0 :(得分:70)
从您提供的示例图片中我很确定您正在寻找UIImage
的{{3}}
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.
UIEdgeInsets结构中的值确定您不希望拉伸的边距。您的左右值可以是这么宽的:
顶部和底部值可以是0(如果您不想垂直调整按钮的大小),或者可能是总高度的一半。
答案 1 :(得分:37)
使用Xcode 6(和 iOS7 + 目标),您可以在处理图像资源时使用切片编辑器。 使用编辑器切换切片模式 - >显示切片菜单或在使用编辑器选择特定图像时按显示切片按钮(如下所示)。
然后,您可以选择特定显示比例的图像并拖动规则或手动编辑插图值。
之后,您可以在界面生成器中为 UIButton 背景图像选择此图像(IB按钮的表示可能看起来很糟糕,但是在跑步时应该没问题。
我的按钮看起来很好(运行iOS 7.1模拟器和iOS 8设备)。
此Apple文档link可能会有所帮助。
答案 2 :(得分:3)
如果没有平铺,我认为你不能使用
- (UIImage *)resizableImageWithCapInsets:(UIEdgeInsets)capInsets
做你想做的事的方法是使用:
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0); // should be proportionally larger
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextDrawImage(context, (CGRect){{0,0}, newSize}, [yourImage CGImage]);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
答案 3 :(得分:1)
使用stretchableImageWithLeftCapWidth:topCapHeight:
方法。
参考:https://github.com/boctor/idev-recipes/tree/master/StretchableImages
答案 4 :(得分:1)
或使用可拉伸图片:
UIImage* imgbkg =[[UIImage imageNamed: @"my_bkg_image.png"] stretchableImageWithLeftCapWidth:10 topCapHeight:10];
[_button setBackgroundImage: imgbkg forState: UIControlStateNormal];
如果您不想拉伸某一方,请使用 0 。