如何更改同一视图中显示的图表?
我在视图控制器中有一个视图。这个视图里面有另一个视图,我已经分配了一个自定义类(子类 UIView)。此自定义类具有在此视图中绘制交互式图表的代码。交互代码由主视图中的滑块操作。我在界面生成器中拥有所有这些。
如果我想在这个视图中绘制一个完全不同的图表怎么办?我希望能够使用一组不同的绘图代码为这个视图分配一个新类?但是怎么做?
这里有一些建议:
1 / 将 customView1 替换为与您的第一个视图相同位置的正确类型的不同视图实例...
self.customView2 = [[CustomView2 alloc] initWithFrame:self.customView1.frame];
[self.view addSubView:self.customView2];
[self.customView1 removeFromSuperView];
此示例为每个交换的子视图使用不同的属性,但您可以使用单个属性来引用当前子视图 - 这可以帮助链接您的滑块以对图表执行正确的操作。如果你做了很多这样的事情,你将需要考虑内存问题——当 customView1 消失时,你会重用它吗?您可以将其保留在(强)属性中(更快,需要更多内存),或者每次都创建一个新属性(更慢,需要更少内存)。
2 / 如果你想在它们之间切换,你可以将它们放在 Interface Builder 中并切换它们的hidden
属性或它们在视图层次结构(self.view.subviews
数组)中的顺序。无需不断地重新创建视图。
3(更好...)/保留 UIView 的单个子类并使用属性来影响绘制的图表...
//CustomView.h
@property (nonatomic,assign) BOOL drawDiagram1;
@property (nonatomic, assign) BOOL drawDiagram2;
//CustomView.m
- (void)drawRect {
if (drawDiagram1) [self drawDiagram1];
if (drawDiagram2) [self drawDiagram2];
}
- (void) drawDiagram1 {
//drawDiagram1 code here
}
- (void) drawDiagram2 {
//drawDiagram2 code here
}