UIButton - 仅在一个方向上可拉伸的背景图像?

Posted

技术标签:

【中文标题】UIButton - 仅在一个方向上可拉伸的背景图像?【英文标题】:UIButton - stretchable background image in one direction only? 【发布时间】:2011-11-21 10:52:33 【问题描述】:

我有一个 UIButton 对象,我在其中使用可拉伸图像作为其背景,因此我始终可以拥有灵活的按钮大小。

问题是我想要一个固定的图像高度(比如 32 像素),但想要有一个更高的可触摸区域(Apple UI 指南总是说至少 44 像素高)。

如果我在 x 中有一个可拉伸的图像,不幸的是它也会在 y 中拉伸。我想告诉图像不要在 y 中拉伸。这可能吗?

[编辑] 是的,是的。回答我自己的问题:

【问题讨论】:

回答您自己的问题作为答案,而不是对问题的编辑。你甚至可以这样接受。 【参考方案1】:

所以,为了帮助别人,我可以回答我自己的问题:

@interface StretchableXButton : UIButton

    CGFloat imageHeight;

@property CGFloat imageHeight;  // we need this later when we override an instance method

+ (id)buttonWithFrame:(CGRect)frame;

@end

现在是实现:

@implementation StretchableXButton
@synthesize imageHeight; 

+ (id)buttonWithFrame:(CGRect)frame

    StretchableXButton *button = [super buttonWithType:UIButtonTypeCustom];

    UIImage *normalImage = [UIImage imageNamed: @"ButtonBGNormal.png" ];
    UIImage *highlightedImage = [UIImage imageNamed:@"ButtonBGHighlighted.png" ];

    button.frame = frame;
    button.imageHeight = normalImage.size.height;  // we need him later in the method below

    // make the images stretchable
    normalImage = [normalImage stretchableImageWithLeftCapWidth:normalImage.size.width/2 topCapHeight:normalImage.size.height/2];
    highlightedImage = [highlightedImage stretchableImageWithLeftCapWidth:normalImage.size.width/2 topCapHeight:normalImage.size.height/2];

    button.backgroundColor = [UIColor clearColor];

    // SET OTHER BUTTON PROPERTIES HERE (textLabel, fonts, etc.)

    [button setBackgroundImage:normalImage forState:UIControlStateNormal];
    [button setBackgroundImage:highlightedImage forState:UIControlStateHighlighted];

    return  button;


// THIS IS THE TRICK.  We make the height of the background rect match the image.
-(CGRect)backgroundRectForBounds:(CGRect)bounds

    CGRect bgRect = bounds;
    bgRect.origin.y = (bounds.size.height - imageHeight)/2.0f;
    bgRect.size.height = imageHeight;

    return bgRect;



@end

【讨论】:

以上是关于UIButton - 仅在一个方向上可拉伸的背景图像?的主要内容,如果未能解决你的问题,请参考以下文章

三星最新屏幕黑科技:可拉伸的OLED屏,能贴在皮肤上

如何在 Javascript 中制作可拉伸的聊天气泡?

如何制作可拉伸的自定义 UITablecell

如何构建一个包含图像的视差样式/可拉伸的表格视图标题,而不会出现丑陋的黑客攻击?

如何将 UIScrollView 的背景图片设置为可拉伸图片?

Unity添加可拉伸的图片