我想知道是否有办法将图层置于其他视图层之上。类似bringSubviewToFront
的内容适用于UIView
类。我认为可以使用zPosition
的{{1}}属性来完成,但这意味着我必须检查所有图层的CALayer
,然后设置正确的值。
提前致谢。
答案 0 :(得分:4)
我相信代码(假设layer
是您的CALayer
)
[layer retain];
CALayer *superlayer = layer.superlayer;
[layer removeFromSuperlayer];
[superlayer addLayer:layer];
[layer release];
会做你想要的,尽管是以迂回的方式。
答案 1 :(得分:3)
这更容易。如果sublayerToBeMovedToFront
是您要移动的图层,itsSuperLayer
就是它的超级图层,只需说:
[itsSuperLayer addSublayer:sublayerToBeMovedToFront];
同时addSublayer
调用将sublayerToBeMovedToFront
从兄弟列表中的任何位置取消挂钩,并将其重新挂钩为最后一个(即最前面,视觉上“在顶部”)子层。这与[aUIView addSubview:]
答案 2 :(得分:1)
此类别将实现您所说的......
的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
。
答案 3 :(得分:0)
如果您使用CALayer
表现,则还应尝试仅使用UIImageView
。在我的情况下,它变得更快一些FPS。 (可能来自我需要在每个图片归因中执行的UIImage
到CGImage
转换)