принесите SubviewToFront для CALayer - PullRequest
5 голосов
/ 27 октября 2009

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

Спасибо заранее.

Ответы [ 4 ]

4 голосов
/ 27 октября 2009

Я считаю, что код (учитывая, что layer это ваш CALayer)

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

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

3 голосов
/ 03 ноября 2012

Это даже проще. Если sublayerToBeMovedToFront - это слой, который вы перемещаете, а itsSuperLayer, ну, в общем, его суперслой, просто скажите:

[itsSuperLayer addSublayer:sublayerToBeMovedToFront];

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

1 голос
/ 08 апреля 2012

Эта категория даст то, о чем вы говорите ...

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 голосов
/ 28 июня 2012

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

...