レイヤーを他のレイヤーの上に表示する方法があるかどうか疑問に思っています。クラスのようなものbringSubviewToFront
。のプロパティでUIView
実行できると思いますが、これは、すべてのレイヤーを確認してから適切な値を設定する必要があることを意味します。zPosition
CALayer
zPosition
前もって感謝します。
私はコードを信じています(それlayer
があなたのものであるとすればCALayer
)
[layer retain];
CALayer *superlayer = layer.superlayer;
[layer removeFromSuperlayer];
[superlayer addLayer:layer];
[layer release];
回りくどい方法ではありますが、あなたが望むことをします。
さらに簡単です。sublayerToBeMovedToFront
が移動しているレイヤーであり、そのスーパーレイヤーである場合は、次のitsSuperLayer
ように言います。
[itsSuperLayer addSublayer:sublayerToBeMovedToFront];
呼び出しは、兄弟リストのどこからでもaddSublayer
同時にフックsublayerToBeMovedToFront
を解除し、最後 (つまり、最前面に配置され、視覚的に「上」) のサブレイヤーとして再フックします。これは、[aUIView addSubview:]
このカテゴリは、あなたが話していることを実現します…</p>
CALayer+Additions.h
#import <Foundation/Foundation.h>
#import <QuartzCore/CALayer.h>
@interface CALayer (Additions)
- (void)moveToFront;
@end
CALayer+Additions.m
#import "CALayer+Additions.h"
@implementation CALayer (Additions)
- (void)moveToFront {
CALayer *superlayer = self.superlayer;
[self removeFromSuperlayer];
[superlayer addSublayer:self];
}
@end
#import "CALayer+Additions.h"
プロジェクト内で新しいメソッドが見つかり、インスタンスmoveToFront
で使用できるようになりました。CALayer
CALayer
パフォーマンスのために を使用している場合は、 のみを使用してみてくださいUIImageView
。私の場合、数 FPS 高速であることが判明しました。(おそらく、すべての画像属性で実行する必要のあるUIImage
toCGImage
変換から)