CALayerの重なる順番はaddSublayer:メソッドでビューに追加した順にどんどん重なっていく仕様のようです。もちろんメソッドの順番でも関係してきます。
その重なりの順番を変更したい場合は「insertSublayer:」メソッドを使用すれば良いようです。以下検証。
レイヤーの順番をいろいろ検証
検証1
//レイヤー1
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(30, 50, 200, 200);
layer.backgroundColor = [UIColor redColor].CGColor;
[self.view.layer addSublayer:layer];
//レイヤー2
CALayer *layer2 = [CALayer layer];
layer2.frame = CGRectMake(50, 70, 200, 200);
layer2.backgroundColor = [UIColor blueColor].CGColor;
[self.view.layer addSublayer:layer2];
レイヤー1、2の表示にaddSublayer:メソッドを使用。
addSublayer:メソッド順にレイヤー1の上にレイヤー2が重なる。
検証2
//レイヤー1
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(30, 50, 200, 200);
layer.backgroundColor = [UIColor redColor].CGColor;
[self.view.layer insertSublayer:layer atIndex:1];
//レイヤー2
CALayer *layer2 = [CALayer layer];
layer2.frame = CGRectMake(50, 70, 200, 200);
layer2.backgroundColor = [UIColor blueColor].CGColor;
[self.view.layer insertSublayer:layer2 atIndex:0];
レイヤー1、2の表示にinsertSublayer:メソッドを使用。レイヤー1のatIndex:の引数を1、レイヤー2のatIndex:の引数に0を指定。
レイヤー2の上にレイヤー1が重なる。
検証3
//レイヤー1
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(30, 50, 200, 200);
layer.backgroundColor = [UIColor redColor].CGColor;
[self.view.layer addSublayer:layer];
//レイヤー2
CALayer *layer2 = [CALayer layer];
layer2.frame = CGRectMake(50, 70, 200, 200);
layer2.backgroundColor = [UIColor blueColor].CGColor;
[self.view.layer insertSublayer:layer2 atIndex:0];
レイヤー2の表示にinsertSublayer:メソッドを使用。atIndex:の引数を0を指定。
レイヤー2の上にレイヤー1が重なる。
検証4
//レイヤー1
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(30, 50, 200, 200);
layer.backgroundColor = [UIColor redColor].CGColor;
[self.view.layer insertSublayer:layer atIndex:1];
//レイヤー2
CALayer *layer2 = [CALayer layer];
layer2.frame = CGRectMake(50, 70, 200, 200);
layer2.backgroundColor = [UIColor blueColor].CGColor;
[self.view.layer addSublayer:layer2];
レイヤー1の表示にinsertSublayer:メソッドを使用。atIndex:の引数を1を指定。レイヤー2はaddSublayer:メソッドを使用。
レイヤー1の上にレイヤー2が重なる。
検証5
//レイヤー1
CALayer *layer = [CALayer layer];
layer.frame = CGRectMake(30, 50, 200, 200);
layer.backgroundColor = [UIColor redColor].CGColor;
[self.view.layer addSublayer:layer];
//レイヤー2
CALayer *layer2 = [CALayer layer];
layer2.frame = CGRectMake(50, 70, 200, 200);
layer2.backgroundColor = [UIColor blueColor].CGColor;
[self.view.layer insertSublayer:layer2 atIndex:1];
レイヤー1の表示にaddSublayer:メソッドを使用。レイヤー2はinsertSublayer:メソッドを使用。atIndex:の引数を1を指定。
レイヤー2の上にレイヤー1が重なる。
おわり
今回の検証より、addSublayer:メソッドとinsertSublayer:メソッドではinsertSublayer:メソッドの方が優先されるようですね。単純なレイヤーの追加はaddSubview:メソッドを利用し、予め設計ができているのであればinsertSubview:メソッドで追加するのが望ましいかもしれません。
また、試してないのですがUIViewを最前面、最背面に持ってくる場合はそれぞれbringSubviewToFront:メソッド、sendSubviewToBack:メソッドを使用すればいいようです。詳しくは以下の記事を参考にしてください。
参考記事
[CALayer]layerの重なり順を設定する - 3ヶ月でiPhoneアプリを1本作る日記Subviewを最前面・最背面に移動する - C開発者によるiPhoneプログラミング
0 件のコメント:
コメントを投稿