2014-04-21 18 views
0

我有麻烦,定制的UISegmentedControl:我的子类是我设置这两个选择状态和非选择状态这样的背景:的UIImage的resizableImageWithCapInsets放置一个阴影图像

#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]]; 

在哪里这是我正在使用的PNG gray_rectgreen_rect

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

这是非常奇怪的,因为没有阴影的原始图像,也没有UISegmentedControl加一个(据我所知)。

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

otheroutput

任何想法?因为我真的会为此感到生气,因为我没有这个问题时使用resizableImageWithCapInsets:UIButton

非常感谢!

回答

0

我想通了。

原来分段控制器的帧高为44pts,背景图像为75ptsx75pts。由于我已将图像的顶部和底部插入图像设置为18pts,因此操作系统会将图像的顶部和底部18pts调整大小,忽略其余部分。这里有趣的部分,因为图像有一个渐变,图像的其余部分被忽略,它的控制着色。

为了使用与垂直梯度图像,您必须使用完全一样的高度的控制PNG使用基(http://useyourloaf.com/blog/2012/07/05/customizing-appearance-with-resizable-images.html

这是我做什么,调整图像到44x44pts,改变插图来UIEdgeInsetsMake(0, 10, 0, 10)表示图像不能垂直调整大小