设置backgroundColor似乎不适用于UIView

时间:2014-03-21 04:17:34

标签: ios objective-c uiview

我有一些代码尝试从图像中设置UIView中的backgroundColor,但我看到的只是黑屏。这是我做的 -

  1. 拥有UIViewController班级和UIView班级
  2. UIView类具有drawRect功能。
  3. UIViewController viewDidLoad函数中创建UIView
  4. 之后调用drawRect中的UIView
  5. 以下是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的原因是我正在绘制棋盘游戏,我想将图像用作背景。这样我就可以在图像上绘制线条(板)。

3 个答案:

答案 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方法中执行,否则可以在视图控制器中(任何位置)执行此操作。