我有一个自定义的UIView,我在drawRect:方法中做了一些低级绘图。当我在XIB文件中实例化视图时,它工作正常。但是,当我以编程方式实例化它时,事情会变得奇怪,例如,
MyView *view = [[MyView alloc] initWithFrame: rect];
[self.view addSubView: view];
似乎每当drawRect:方法运行时,生成的视图都包含与之前调用中的一些旧图形重叠的当前图形。换句话说,当调用drawRect:时,似乎没有清除视图。
答案 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];
如果有人能给出更好的解释,我将不胜感激。