0

我有一个自定义的 UIView,我在其中使用 drawRect: 方法进行一些低级绘图。当我在 XIB 文件中实例化视图时,它工作正常。但是,当我以编程方式实例化它时,事情变得很奇怪,例如,

MyView *view = [[MyView alloc] initWithFrame: rect];

[self.view addSubView: view]; 

似乎每当 drawRect: 方法运行时,结果视图都包含当前绘图与之前调用中制作的一些旧绘图重叠。换句话说,似乎在调用 drawRect: 时视图还没有被清除。

4

2 回答 2

0

我刚刚发现问题的原因是视图的 backgroundColor 属性设置为 nil。

我想知道这是否是一个错误,因为 backgroudColor=nil 是透明背景的有效值。一种可能的解释是,当在视图的 drawRect 方法中完成自定义绘图时,背景颜色必须不是透明的,即使当前的 UIView 类引用没有详细说明。

为了清楚起见,这就是我所做的:

MyView *view = [[MyView alloc] initWithFrame: rect];
[self.view addSubView: view]; 
self.view.backgroundColor = [UIColor darkGrayColor];

如果有人能给出更好的解释,我将不胜感激。

于 2013-08-08T06:34:33.140 回答
0

让我们在您的 viewDidLoad 方法或任何地方检查此代码。并检查矩形框大小不应为 nill 或 0。

- (void)viewDidLoad
{
    [super viewDidLoad];

    MyView *view = [[MyView alloc] initWithFrame: rect];

    NSLog(@"rect size %@  %@",NSStringFromCGRect(rect.bounds),NSStringFromCGRect(view.bounds));

    view.backGroundCOlor = [UIColor redColor];

    [self.view addSubView: view]; 
}

检查它是否工作。

于 2013-07-04T05:30:59.483 回答