2

我有一个UIImageView我想要可拉伸的图像。为了实现这一点,我执行以下操作viewDidLoad

-(void) buildResizableDescriptionAreaBackground
{
    UIImage *image = [UIImage imageNamed:@"description_area_background"];
    CGFloat top = ceilf(image.size.height / 2.0) - 1;
    CGFloat bottom = floorf(image.size.height / 2.0);
    CGFloat left = ceilf(image.size.height / 2.0) - 1;
    CGFloat right = floorf(image.size.height / 2.0);
    if ([image respondsToSelector:@selector(resizableImageWithCapInsets:)])
    {
        image = [image resizableImageWithCapInsets:UIEdgeInsetsMake(top, left, bottom, right)];
    }
    else 
    {
        image = [image stretchableImageWithLeftCapWidth:left topCapHeight:top];
    }
    [self.descriptionAreaBackgroundImage setImage:image];
    [self.descriptionAreaBackgroundImage setHighlightedImage:image];
}

当我调试它时,我确保它descriptionAreaBackgroundImage不是 nil,不是隐藏的,alpha = 1 并且具有正确的框架。此外,我确保图像不为零,具有正确的大小,并且可调整大小的图像也不为零。然而图像未设置为 UIImageView。

如果我这样做viewDidAppear:一切正常。如果我设置一个常规图像(不可拉伸,即使在viewDidLoad)一切正常。

据我所知,任何不需要超级视图或窗口的设置都可以在 完成viewDidLoad,那么为什么它不起作用?

4

2 回答 2

1

看起来您的 UIEdgeInsetsMake() 调用指定了 0x0 点的区域。尝试确保指定一个 1x1 区域。

例如,您的可拉伸图像的大小为 7x7 像素,并且您希望拉伸中心像素,您可以像这样指定边缘插入: UIEdgeInsetsMake(3.0f, 3.0f, 3.0f, 3.0f)

于 2012-08-19T20:57:49.607 回答
-1

好的,我找到了导致它的原因,愚蠢的错误。

在我的 viewDidLoad 中,我正在加载另一个包含其他视图的 .xib 文件:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Some setups
    [[NSBundle mainBundle] loadNibNamed:@"RatingDialog" owner:self options:nil];
    // More setups...
    [self buildResizableDescriptionAreaBackground]; // NOT WORKING!!
}

显然,该笔尖中的一个 UIImageViews 也错误地连接到了我的 descriptionAreaBackground 插座。所以当我设置可调整大小的图像时,它是错误的视图......

多么愚蠢。

于 2012-08-20T07:55:04.897 回答