围绕互联网,我遇到了以下代码,用于拉伸图像以填充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>的。有人可以给我一个快速的速成课程,或者(如果我离开基地)指出实际上有什么错误?
self.view.bounds.size.width: 768
self.subView.bounds.size.width: 0
...咦??框架也是如此。但是......它就在那里,它有尺寸......
答案 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;
}