これを行うには多くの方法がありますが、実行時にクラスを変更することはお勧めできません
以下にいくつかの提案を示します。
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
}