2009-10-27 88 views
5

我想知道是否有方法将图层置于其他图层之上。类似于bringSubviewToFrontUIView类。我认为这可以通过CALayerzPosition属性来完成,但这意味着我必须检查所有图层的zPosition,然后设置适当的值。CALS的bringSubviewToFront

在此先感谢。

回答

4

我相信代码(假设layer是你CALayer

[layer retain]; 
CALayer *superlayer = layer.superlayer; 
[layer removeFromSuperlayer]; 
[superlayer addLayer:layer]; 
[layer release]; 

会做你想做的,尽管在一种迂回的方式。

+0

感谢一个战利品。这就是我需要的 – Dmytro 2009-10-28 07:26:38

+0

如何交换两层的z-index? – Raptor 2009-12-10 09:16:17

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实例。

0

如果您使用CALayer进行性能测试,您还应该尝试仅使用UIImageView's。在我看来,它变成了几个FPS更快。 (也许从UIImageCGImage转换,我需要在每个图像归属执行)

3

它更容易。如果sublayerToBeMovedToFront是你移动和itsSuperLayer的层,那么,它superlayer,只是说:

[itsSuperLayer addSublayer:sublayerToBeMovedToFront]; 

addSublayer通话同时不管它是在兄弟列表脱钩sublayerToBeMovedToFront和rehooks它作为最后的(即,位于最前面,视觉上“在顶部”)子层上。这与[aUIView addSubview:]