如何更新/重绘UIView

时间:2014-01-18 19:49:46

标签: ios objective-c uiview drawrect redraw

我有一个UIView,在视图的drawRect方法中,我使用CGRect绘制线条,UILabel在视图上绘制标签。

我想在触摸视图后更改线条的颜色。触摸视图时,它会通知我的ViewController触摸:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.controller viewTouched:self];
}

我的ViewController通过从超级视图中删除视图,创建新的UIView并设置任何必要的属性(包括线条的新颜色)以及将视图重新添加到超级视图来做出响应:

-(void)redrawView:(SomeView *)view asSelected:(BOOL)selected
{
    [view removeFromSuperview];
    SomeView *newView = [[SomeView alloc] initWithFrame:view.frame];
    newView.tintColor =  (selected) ? [UIColor blueColor] : [UIColor redColor];
    newView.controller = self;
    [self.scrollView addSubview:newView];
}

我遇到的问题是UILabel永远不会从UIView中删除。它不断在旧的UILabel之上绘制新的UILabel。

我是否正确地重绘了视图?我是否以最有效的方式重新绘制视图?重新绘制视图我不明白的是什么?

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

尝试将redrawView方法代码放在UIView类的drawRect中。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    [self.controller viewTouched:self]; // ask to refresh your view inside viewTouched 
                                        // by calling [self setNeedsDisplay:YES]; there
}