【问题标题】:UIImage's resizableImageWithCapInsets places a shadow on imageUIImage 的 resizableImageWithCapInsets 在图像上放置阴影
【发布时间】:2014-04-21 18:19:27
【问题描述】:

我在自定义 UISegmentedControl 时遇到问题:我已将其子类化 我正在为选定状态和未选定状态设置它的背景,如下所示:

#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

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

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

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

有什么想法吗?因为我真的为此发疯了,因为我在使用resizableImageWithCapInsets:UIButton 时没有这个问题

非常感谢!

【问题讨论】:

    标签: ios uiimage uikit uisegmentedcontrol


    【解决方案1】:

    我想通了。

    原来分段控制器的框架是 44pts 高度,背景图像是 75ptsx75pts。由于我已将图像的顶部和底部插图设置为 18pts,因此操作系统正在获取图像的顶部和底部 18pts 并调整其大小,而忽略其余部分。这是有趣的部分,因为图像有渐变,图像的其余部分被忽略,控件是这样着色的。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多