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

时间:2013-04-04 21:23:11

标签: ios xcode

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

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

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

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,但changing the class at runtimenot advisable

以下是一些建议:

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
}