我有一些代码尝试从图像中设置UIView中的backgroundColor,但我看到的只是黑屏。这是我做的 -
UIViewController
班级和UIView
班级UIView
类具有drawRect
功能。UIViewController
viewDidLoad
函数中创建UIView
类drawRect
中的UIView
。 以下是UIView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
// Initialization code
}
return self;
}
- (void)drawRect:(CGRect)rect
{
UIColor *backGround = [UIColor colorWithPatternImage:[UIImage imageNamed:@"test.png"]];
self.backgroundColor = backGround;
}
在调试器中验证执行后backGround
对象不是nil。还测试了test.png文件,我可以用它创建一个UIImageView
。
如果我在backgroundColor
函数中设置initWithFrame
而不是drawRect()
我想设置backgroundColor
的原因是我正在绘制棋盘游戏,我想将图像用作背景。这样我就可以在图像上绘制线条(板)。
答案 0 :(得分:2)
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
// Initialization code
UIColor *backGround = [UIColor colorWithPatternImage:[UIImage imageNamed:@"test.png"]];
self.backgroundColor = backGround;
}
return self;
}
更改 drawRect 中的背景将无效。必须在 init 方法中对其进行任何更改。
答案 1 :(得分:1)
只需在viewDidLoad
-(void)viewDidLoad{
UIColor *backGround = [UIColor colorWithPatternImage:[UIImage imageNamed:@"test.png"]];
self.view.backgroundColor = backGround;
//.....
}
修改强>
对于您的问题:
绘图由与视图关联的图层完成。看起来,在您的环境中,背景色图层在调用-drawRect:
方法之前正在进行绘制。重绘图层时,您的-drawRect:
方法也恰好被调用。因此,在更改背景颜色后,在背景图层再次绘制之前,您看不到任何更改,您可以告诉它,因为您的-drawRect:再次被调用。 (Here&& Check for more info)
答案 2 :(得分:0)
在drawRect方法中,您不应该设置背景。你必须做绘画,你想在视图中绘制。背景视图是单独的视图。如果要在自定义视图中设置背景视图,请在init方法中执行,否则可以在视图控制器中(任何位置)执行此操作。