从3张图片中构建UIButton

时间:2013-05-28 22:39:41

标签: ios uibutton uiimage

我想用3个图像(A,B,C)构建一个UIButton。 A和C是可伸缩的组件(取决于按钮文本),中间部分是固定的。

将这些图像相互附加的最佳方法是什么?如何在不指定所有原点和宽度等的情况下灵活实施......是否需要有周围的矩形?

3 个答案:

答案 0 :(得分:3)

您需要在图像编辑器中将图像拼接在一起以创建单个图像。然后,您将加载此图像,并使用UIImage resizableImageWithCapInsets:resizingMode:方法创建可调整大小的版本。您将指定UIEdgeInsets镜像两个“端盖”图像的原始宽度。

对于按钮本身,您需要将此可调整大小的图像作为按钮的背景图像。它不能用作前景图像。

   UIImage* bgImage = [[UIImage imageNamed:@"my_bg_image"] resizableImageWithCapInsets: UIEdgeInsetsMake(0, 10, 0, 10)];

   UIButton* b = [UIButton buttonWithType: UIButtonTypeCustom];
    [b setBackgroundImage: bgImage forState: UIControlStateNormal];

答案 1 :(得分:2)

我最近不得不实施这样的事情。 我的策略是使用UIView对象构建我想要的东西,然后将创建的视图写入UIImage。

我建议: - 创建一个容器视图
- 为按钮文本创建UILabels,添加到容器视图
- 对于标签A和C,sizeToFit在他们有了他们的文本,然后使用该信息将可伸展按钮放置在视图中 - 如果子视图已定位,您可能需要重置容器视图的框架以确保它仍然正确。

一旦您的视图以您希望的方式显示,请使用以下方法将其写入图像:

UIGraphicsBeginImageContextWithOptions(container.frame.size, NO, 0); //or YES if you have no opacity in your images
[container.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

- 然后您可以将其设置为UIButton的图像

答案 2 :(得分:1)

执行此操作的最佳方法是将3个图像放入一个文件中,然后使用resizableImageWithCapInsets:。请参阅doco here

Here's a good tutorial如何做到这一点。

// Set the button background image
UIImage * buttonImage = [UIImage imageNamed:@"button_resizable.png"];
UIImage * resizableButtonImage = [buttonImage resizableImageWithCapInsets:UIEdgeInsetsMake(0, 12, 0, 12)];
[button setBackgroundImage:resizableButtonImage forState:UIControlStateNormal];