1

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

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

在此处输入图像描述

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

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

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

在此处输入图像描述

iOS 6 有了新方法

resizableImageWithCapInsets:resizingMode:

它允许您指定“拉伸”调整大小模式,但它不适用于 iOS5。

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

4

2 回答 2

0

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

于 2013-03-08T08:02:29.550 回答
0

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

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));
于 2013-08-22T10:23:26.713 回答