0

同じビューに表示されるダイアグラムを変更するには?

ビューコントローラー内にビューがあります。このビューには別のビューがあり、そこにカスタム クラス (サブクラス化 UIView) を割り当てました。このカスタム クラスには、このビューでインタラクティブな図を描画するためのコードが含まれています。インタラクティブ コードは、メイン ビューのスライダーで操作します。私はこれらすべてをインターフェースビルダーに持っています。

このビューでまったく別の図を描きたい場合はどうすればよいですか? 別の描画コード セットを使用して、このビューに新しいクラスを割り当てたいですか? しかし、どのように?

4

1 に答える 1

0

これを行うには多くの方法がありますが、実行時にクラスを変更することお勧めできません

以下にいくつかの提案を示します。

1 / customView1 を、最初のビューと同じ場所にある適切なタイプの別のビュー インスタンスに置き換えます...

   self.customView2 = [[CustomView2 alloc] initWithFrame:self.customView1.frame];
   [self.view addSubView:self.customView2];
   [self.customView1 removeFromSuperView];

この例では、スワップされたサブビューごとに個別のプロパティを使用していますが、現在のサブビューを参照するためだけに 1 つのプロパティを使用することもできます。これにより、スライダーをリンクしてダイアグラムに適切な処理を行うことができます。これを頻繁に行う場合は、メモリの問題について考える必要があります。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 に答える