以编程方式创建自定义UIView

时间:2013-07-04 04:58:30

标签: ios uiview customizing

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

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

[self.view addSubView: view]; 

似乎每当drawRect:方法运行时,生成的视图都包含与之前调用中的一些旧图形重叠的当前图形。换句话说,当调用drawRect:时,似乎没有清除视图。

2 个答案:

答案 0 :(得分: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]; 
}

检查它是否正常工作。

答案 1 :(得分:0)

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

我想知道这是不是一个bug,因为backgroudColor = nil是透明背景的有效值。可能的解释是,在视图的drawRect方法中完成自定义绘制时,背景颜色必须是透明而非透明的,即使当前的UIView类引用不是精心设计的。

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

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

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