【发布时间】:2014-01-18 19:49:46
【问题描述】:
我有一个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。
我是否正确地重绘了视图?我是否以最有效的方式重绘视图?关于重绘视图,我不明白什么?
非常感谢您的帮助。
【问题讨论】:
-
frame来自哪里?无论如何,我会首先添加一些 NSLog 语句来跟踪执行流程。首先,确保所有这些方法都被实际调用,其次,确保您没有遇到 nil 问题,或者您的框架不正确或其他任何问题。 -
框架在那里,看起来我意外删除了问题中的行。我没有看到任何 nil 问题,我一直在逐步解决它,但无法弄清楚它为什么不起作用。
-
你能重新编辑删除的行吗?
-
当然,但我怀疑这会帮助任何人解决我的整体问题。 ;)
-
出于多种原因,您在此处发布的代码应该与您实际拥有的代码相同。
标签: ios objective-c uiview drawrect redraw