在互联网上,我遇到了以下用于拉伸图像以填充 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。有人可以给我一个快速的速成课程,或者(如果我离基地很远)指出什么是真正的问题?
编辑:现在我真的很困惑。使用 NSLog,我收集了以下信息:
self.view.bounds.size.width: 768
self.subView.bounds.size.width: 0
……嗯??框架也是如此。但是......它就在那里,它有尺寸......