[objective-c] subviewのz-orderを入れ替える

UIViewの表示順(z-order とか z-index とか言われるヤツ)を入れ替える方法です。

表示順を変えるだけでしたら

#import “QuartzCore/QuartzCore.h”

subview1.layer.zPosition = 2;
subview2.layer.zPosition = 1;

のようにlayerのzPositionを入れ替えればOKです。
ただし、このzPositionは初期値で0ですので最初から表示順を指定していた場合には有効ですが、
後から変更する場合にはちょっと都合が悪い。

ですので、そういった場合にはsuperviewに追加されているsubviewのindexを直接変更した方が楽チンです。

で、どうするのかと言うと。
まず、入れ替えたいsubviewのindexを取得します。

UIView *superview = subview1.superview;
int idx1 = [superview.subviews indexOfObject:subview1];
int idx2 = [superview.subviews indexOfObject:subview2];

その上で入れ替えます。

[superview exchangeSubviewAtIndex: idx1 withSubviewAtIndex: idx2];

これでsubviewの表示順が入れ替わってくれますよ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です