在子视图中拉伸的背景图像

时间:2013-07-27 21:27:25

标签: objective-c cocoa-touch

围绕互联网,我遇到了以下代码,用于拉伸图像以填充UIView:

UIGraphicsBeginImageContext(self.view.frame.size);
[[UIImage imageNamed:@"image.png"] drawInRect:self.view.bounds];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

self.view.backgroundColor = [UIColor colorWithPatternImage:image];

这一切都很好。但是我想我会重新调整代码以使用自定义UIView类作为子视图,并将以下代码放在initWithCoder:中(因为视图正在故事板中添加),如下所示:

- (id)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    if (self) {
        UIGraphicsBeginImageContext(self.frame.size);
        [[UIImage imageNamed:@"image.png"] drawInRect:self.bounds];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();

        self.backgroundColor = [UIColor colorWithPatternImage:image];
    }
    return self;
}

请注意,我已将“self.view”更改为“self”以反映此视图本身而不是视图控制器调用此代码。第一个代码示例工作得很好,并且充满了视图。第二个没有(即使我把它放在视图控制器ala self.subView.frame.size中),我感觉这是因为我没有正确理解 frame bounds < / em>的。有人可以给我一个快速的速成课程,或者(如果我离开基地)指出实际上有什么错误?

编辑:现在我真的很困惑。使用NSLog,我收集了以下信息:

self.view.bounds.size.width: 768
self.subView.bounds.size.width: 0

...咦??框架也是如此。但是......它就在那里,它有尺寸......

1 个答案:

答案 0 :(得分:2)

我认为可能有一种更简单的方法来完成你想要做的事情。如果我理解正确,您希望将image.png作为自定义视图的背景图片。如果是这样,您只需在初始化自定义视图时添加UIImageView即可。

- (id) initWithCoder: (NSCoder *) coder
{
    self = [super initWithCoder: coder];
    if (self) {

        UIImageView *imageView = [[UIImageView alloc] initWithFrame: self.bounds];
        [imageView setAutoresizingMask: (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth)];
        [imageView setImage: [UIImage imageNamed: @"image.png"]];
        [self addSubview: imageView];
    }
    return self;
}