我有一个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。
我是否正确地重绘了视图?我是否以最有效的方式重新绘制视图?重新绘制视图我不明白的是什么?
非常感谢您的帮助。
答案 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
}