0

在互联网上,我遇到了以下用于拉伸图像以填充 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),我有一种感觉是因为我没有正确理解framebounds。有人可以给我一个快速的速成课程,或者(如果我离基地很远)指出什么是真正的问题?

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

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

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

4

1 回答 1

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;
}
于 2013-07-27T23:57:14.013 回答