0

如何更改同一视图中显示的图表?

我在视图控制器中有一个视图。这个视图里面有另一个视图,我已经分配了一个自定义类(子类 UIView)。此自定义类具有在此视图中绘制交互式图表的代码。交互代码由主视图中的滑块操作。我在界面生成器中拥有所有这些。

如果我想在这个视图中绘制一个完全不同的图表怎么办?我希望能够使用一组不同的绘图代码为这个视图分配一个新类?但是怎么做?

4

1 回答 1

0

有很多方法可以做到这一点,但不建议在运行时更改类

这里有一些建议:

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
}
于 2013-04-04T21:55:27.447 回答