2009-10-27 3 views
5

Мне интересно, есть ли способ принести слой поверх других слоев зрения. Что-то вроде bringSubviewToFront делает для UIView класс. Я думаю, что это можно сделать с zPosition свойством CALayer, но это означает, что я должен проверить zPosition для всех слоев, а затем установить правильное значение.bringSubviewToFront для CALayer

Заранее спасибо.

ответ

4

Я считаю, что код (при условии, что layer ваш CALayer)

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

будет делать то, что вы хотите, хотя и окольным путем.

+0

Спасибо за добычу. Это то, что мне нужно – Dmytro

+0

как поменять z-индекс двух слоев? – Raptor

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

Если вы используете для исполнения, попробуйте использовать только UIImageView. В моем случае это оказалось несколько FPS быстрее. (возможно, из UIImage в CGImage преобразований, которые мне нужно было внести при каждой привязке изображения)

3

Это еще проще. Если sublayerToBeMovedToFront является слой вы двигаетесь и itsSuperLayer, ну, его superlayer, просто сказать:

[itsSuperLayer addSublayer:sublayerToBeMovedToFront]; 

addSublayer вызов одновременно отцепляется sublayerToBeMovedToFront оттуда, где он был в списке родственного и rehooks его как последний (т.е. , расположенный впереди, визуально «сверху»). Это точно аналогично поведению [aUIView addSubview:]