UIImage的resizableImageWithCapInsets在图像上放置阴影

时间:2014-04-21 18:19:28

标签: ios uiimage uikit uisegmentedcontrol

我在定制UISegmentedControl时遇到问题:我已将其分类为我为所选状态和未选择状态设置了背景,如下所示:< / p>

#define kEdgeInsets UIEdgeInsetsMake(18, 18, 18, 18)

    UIImage *grayImage = [[UIImage v_imageNamed:@"gray_rect"] resizableImageWithCapInsets:kEdgeInsets];
    [self setBackgroundImage:grayImage
                    forState:UIControlStateNormal
                  barMetrics:UIBarMetricsDefault];

    UIImage *greenImage = [[UIImage v_imageNamed:@"green_rect"] resizableImageWithCapInsets:kEdgeInsets];
    [self setBackgroundImage:greenImage
                    forState:UIControlStateSelected
                  barMetrics:UIBarMetricsDefault];

    [self setTintColor:[UIColor colorWithRed:0.506 green:0.514 blue:0.525 alpha:1.000]];

这是我使用gray_rect green_rect

的PNG

现在,当我执行此代码时,我在分段控件上得到了一个奇怪的阴影,这不是我们想要的。这就是输出output

的样子

这很奇怪,因为原始图像上没有阴影,UISegmentedControl也没有添加阴影(据我所知)。

进一步检查,我注意到如果我删除resizableImageWithCapInsets:调用,图像看起来会扭曲(正如人们所期望的那样),但没有阴影。

otheroutput

有什么想法吗?因为我对resizableImageWithCapInsets:

使用UIButton时没有遇到这个问题,所以我真的很生气

非常感谢!

1 个答案:

答案 0 :(得分:0)

我明白了。

结果显示分段控制器的帧高44pts,背景图像为75ptsx75pts。由于我将图像的顶部和底部插图设置为18pts,因此操作系统正在拍摄图像的顶部和底部18个点并调整其大小,忽略其余部分。这是有趣的部分,因为图像有一个渐变,图像的其余部分被忽略,控件的颜色就像那样。

要使用具有垂直渐变的图像,您必须使用与控件完全相同的基本PNG(http://useyourloaf.com/blog/2012/07/05/customizing-appearance-with-resizable-images.html

这就是我所做的,将图像大小调整为44x44pts并将插图更改为UIEdgeInsetsMake(0, 10, 0, 10),表示图像不必垂直调整大小