Ios 以编程方式创建自定义UIView

Ios 以编程方式创建自定义UIView,ios,uiview,customizing,Ios,Uiview,Customizing,我有一个定制的UIView,在其中我使用drawRect:method进行一些低级绘图。当我在XIB文件中实例化视图时,它工作得很好。然而,当我以编程方式实例化它时,事情会变得很奇怪,例如 MyView *view = [[MyView alloc] initWithFrame: rect]; [self.view addSubView: view]; 无论何时运行drawRect:method,生成的视图都会包含与以前调用中的一些旧图形重叠的当前图形。换句话说,调用drawRect:时,

我有一个定制的UIView,在其中我使用drawRect:method进行一些低级绘图。当我在XIB文件中实例化视图时,它工作得很好。然而,当我以编程方式实例化它时,事情会变得很奇怪,例如

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

[self.view addSubView: view]; 

无论何时运行drawRect:method,生成的视图都会包含与以前调用中的一些旧图形重叠的当前图形。换句话说,调用drawRect:时,视图似乎没有被清除。

让我们在viewDidLoad方法或任何地方使用此代码进行检查。并检查rect帧大小不应为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]; 
}

检查它是否工作。

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

我想知道这是否是一个bug,因为backgroundcolor=nil是透明背景的有效值。一种可能的解释是,在视图的drawRect方法中进行自定义绘制时,背景颜色必须是透明以外的颜色,即使当前UIView类引用没有透明

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

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

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

您在问题中发布的代码在哪里?可能您正在添加多个视图。问题是什么?哪个视图不清晰?你所说的当前绘图是什么意思?我的应用程序通过定期调用其setNeedsDisplay方法来更新视图。每次更新时,都会在drawRect方法中生成一个新图形。我的问题是,此新(或当前)图形与以前更新中的一些旧图形重叠。我的问题没有说明代码放在哪里,但代码在主视图控制器的viewDidLoad方法中。所以它和你上面建议的完全一样(除了背景色)。所以它不起作用了。。。