我可以将三个图像合并为一个按钮的背景图像吗?

时间:2013-01-19 07:08:38

标签: ios button background uibutton background-image

在这种情况下,我需要添加三个图像来制作按钮。

左桅杆部分,中间部分和右端部分有三个部分的图像。

图像的左侧部分 - > Left part of the button.图像的中间部分 - > Middle part of the button.图像的右侧部分 - > Right part of the button.

由于中间的文字,即按钮标题因按钮而异,我不想每次都创建一个不同尺寸的单独图像。我认为应该有一种方法可以合并这些按钮,根据提供的按钮宽度制作一个完整的按钮。

enter image description here

完成所有操作后,完整按钮应如下所示。

我希望你得到我需要的东西。请提出一些解决方案。

2 个答案:

答案 0 :(得分:1)

要执行此操作,请使用可伸缩的图像。

您制作的图像将是左侧部分,中间部分和右侧部分的单个图像。

中间部分只需要一个像素宽。 (想象一下你的按钮在两端之间只有一个很小的空间会是什么样子。这就是你的形象。

然后你使用这段代码......

UIImage *image = [UIImage imageNamed:@"MyImage"];

UIImage *stretchableImage = [image stretchableImageWithLeftCapWidth:10 topCapHeight:0];

[myButton setBackgroundImage:stretchableImage forState:UIControlStateNormal];

然后,这将采用该窄图像,并在像素宽度(即本例中为10)之后取像素,并且它将重复该单个像素所需的次数以获得按钮的整个宽度。

无论按钮有多小或多大,您都可以在任何地方重复使用此单个图像。

答案 1 :(得分:-1)

您可以使用按钮标题标签设置文本,同时保持背景图像的通用。

例如: - 作品

      [btn setTitle:@"something" forState:UIControlStateNormal];
      [btn setTitle:@"something" forState:UIControlStateHighlighted];
      [btn setTitle:@"something" forState:UIControlStateDisabled];
      [btn setTitle:@"something" forState:UIControlStateSelected];

您可以使用设置图像到按钮           setImage:forState方法或setBackgrounImage:forState

例如: -
          btnImage = [UIImage imageNamed:@“image.png”];           [btnTwo setImage:btnImage forState:UIControlStateNormal];           //或设置为背景图像

      [btnTwo setBackgroundImage:[UIImage imageNamed:@"name.png"] forState:UIControlStateNormal];

您可以使用UIButton

的font属性使用图像中使用的不同字体

例如: - btn.titleLabel.font = [UIFont systemFontOfSize:size];

  //OR 

您还可以使用类似的设置字体大小和字体样式。它比你要求的要多一点,但是嘿,这到底是什么......

      [btn.titleLabel setFont:[UIFont fontWithName:@"Helvetica-Bold" size:13.0]];

并且......如果您感觉活泼,可以通过实现此代码然后检查xCode调试器中的输出来找到可用字体列表。

代码:

      NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
      NSArray *fontNames;
      NSInteger indFamily, indFont;
      for (indFamily=0; indFamily<[familyNames count]; ++indFamily)
      {
      NSLog(@"Family name: %@", [familyNames objectAtIndex:indFamily]);
      fontNames = [[NSArray alloc] initWithArray:
        [UIFont fontNamesForFamilyName:
        [familyNames objectAtIndex:indFamily]]];
      for (indFont=0; indFont<[fontNames count]; ++indFont)
      {
         NSLog(@"    Font name: %@", [fontNames objectAtIndex:indFont]);
      }
      }