stretchableImageWithLeftCapWidth:topCapHeight在initWithCoder中不起作用:UIImageView子类

时间:2009-08-13 20:38:33

标签: iphone objective-c uiimageview uiimage

我有一个名为ShadowView的UIImageView子类,它显示可以在任何东西下使用的阴影。 ShadowViews将从笔尖加载。

在initWithCoder:中,我有以下代码:

- (id)initWithCoder:(NSCoder *)decoder {
    self = [super initWithCoder:decoder];
    if (self != nil) {
        UIImage *shadowImage = [[UIImage imageNamed:@"drop_shadow_4_pix.png"] stretchableImageWithLeftCapWidth:4 topCapHeight:4];

        [self setContentMode:UIViewContentModeScaleToFill];
        [self setImage:shadowImage];
    }
    return self;
}

但是,当我运行应用程序时,此图像不会出现。

但如果我将其改为

...
UIImage *shadowImage = [UIImage imageNamed:@"drop_shadow_4_pix.png"];
...

它工作正常,但它被拉错了。

有关为何发生这种情况的任何想法?

编辑:当我以编程方式加载shadowview时,使用initWithFrame:与initWithCoder类似地实现:。

另一个编辑:我想我解决了这个问题。我需要设置自动调整遮罩。

1 个答案:

答案 0 :(得分:3)

shadowImage是否为nil?

UIImage *shadowImage = [[UIImage imageNamed:@"drop_shadow_4_pix.png"] stretchableImageWithLeftCapWidth:4 topCapHeight:4];

如果基本图像小于5像素宽或5像素高,那么该方法可以返回nil,因为它需要4个像素用于大写字母+ 1个像素来拉伸。