为CALayer带来SubSubviewToFront

时间:2009-10-27 08:43:38

标签: iphone calayer

我想知道是否有办法将图层置于其他视图层之上。类似bringSubviewToFront的内容适用于UIView类。我认为可以使用zPosition的{​​{1}}属性来完成,但这意味着我必须检查所有图层的CALayer,然后设置正确的值。

提前致谢。

4 个答案:

答案 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。 (可能来自我需要在每个图片归因中执行的UIImageCGImage转换)