InsertSubviewしたときはaddSubviewはいらない
UIViewをサブビューとして画面に表示させたいとき、
UIView *subview = [[[UIView alloc] init] autorelease]; [parentView addSubview:subview];
のように書くとparentViewのサブビューリストの末尾にsubviewが追加される(一番上に表示される)
で、既存のサブビューの並び順を変えたいときは、
[parentView bringSubviewToFront:subview]; // subviewのインデックスを末尾に移動する(一番上に表示される) [parentView sendSubviewToBack:subview]; // subviewのインデックスを先頭に移動する(一番後ろに表示される)
これらを使う。
InsertSubviewはサブビューリストに新たにサブビューを挿入する
勘違いしていたのだけど、insertSubviewも前述2つのメソッドと同じように既存サブビューのインデックスをいじるものだと思っていた。
考えてみればinsertって付いているのだから、気がつけよと…
[parentView insertSubview:subview1 aboveSubview:subview2]; // 既存subview2の上に新たにsubview1が挿入される [parentView insertSubview:subview1 belowSubview:subview2]; // 既存subview2の下に新たにsubview1が挿入される [parentView insertSubview:subview1 atIndex:index]; // parentViewのサブビューリストのindexの位置に新たにsubview1を挿入する
新たに追加するので、insertSubviewを使用するならaddSubviewしてはいけない(※追記)
[parentView insertSubview:subview atIndex:[parentView.subviews count]];
と、
[parentView addSubview:subview];
は同義ってことですね。
今まではaddSubviewした後にinsertSubviewで順番を入れ替えるとかアホなことしてました。
※追記 2013/05/09 10:16
既にsubviewとなっているviewをもう一度addSubviewしようとしても特に問題なかった。
その場合貼り直しになるので、indexは最大になる。
既にsuperviewを持っているviewを他のviewにaddSubviewした場合の振る舞い - taoru's memo