From the example images you provided I’m pretty sure you’re looking for UIImage
‘s resizableImageWithCapInsets:
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.
The values in the UIEdgeInsets struct determine the margins you don’t want to be stretched. Your left and right values could be about this wide:
The top and bottom values can be either 0 (if you don’t want to resize the button vertically), or probably half of the total height.