UIBarButtonItem在iOS5中展开未平铺的UIImage

时间:2012-12-28 16:32:07

标签: iphone ios uikit

我正在使用外观API来自定义我的UIBarButtonItems的外观。

我目前需要让我的按钮看起来像这样:

enter image description here

在iOS5中你有这个我正在使用的方法:

UIImage *button = [[UIImage imageNamed:@"btn"]
                     resizableImageWithCapInsets:UIEdgeInsetsMake(3, 3, 3, 3)];
[[UIBarButtonItem appearance] setBackgroundImage:button forState:UIControlStateNormal
                                      barMetrics:UIBarMetricsDefault];

但是这会平铺图像的非加盖部分而不是拉伸,这给了我:

enter image description here

iOS 6有一个新方法

resizableImageWithCapInsets:resizingMode:

使用它可以指定'拉伸'调整大小模式,但它不适用于iOS5。

如何使按钮拉伸而不是平铺iOS5图像的中心?

2 个答案:

答案 0 :(得分:0)

事实证明这在iOS5中是不可能的,如果设置样式,按钮应始终使用水平样式渐变,因为图像将始终平铺。我最终改变了渐变方向。

答案 1 :(得分:0)

如果需要拉伸,可以使用iOS5旧的和不推荐的stretchableImageWithLeftCapWidth:topCapHeight:方法:

UIImage* (^makeStretchableImage)(UIImage*, CGSize) = nil;
if ([UIImage instancesRespondToSelector:@selector(resizableImageWithCapInsets:resizingMode:)])
{
    // If resizableImageWithCapInsets:resizingMode: is available, use it
    makeStretchableImage = ^(UIImage* image, CGSize inset) {
        return [image resizableImageWithCapInsets:UIEdgeInsetsMake(inset.height, inset.width, inset.height, inset.width) resizingMode:UIImageResizingModeStretch];
    };
}
else
{
    // Else, we are on an older iOS release, use the deprecated iOS5 method instead
    makeStretchableImage = ^(UIImage* image, CGSize inset) {
        return [image stretchableImageWithLeftCapWidth:inset.width topCapHeight:inset.height];
    };
}

UIImage* stretchableImage1 = makeStretchableImage(originalImage1, CGSizeMake(5,2));
UIImage* stretchableImage2 = makeStretchableImage(originalImage2, CGSizeMake(15,4));
UIImage* stretchableImage3 = makeStretchableImage(originalImage3, CGSizeMake(8,5));