CALayer перекрывает верхний слой после преобразования - PullRequest
2 голосов
/ 15 февраля 2011

У меня есть два CALayers, каждый из которых показывает изображение.Первый (левый) слой в иерархии представлений находится поверх второго.Проблема в том, что после того, как я применил вращение вокруг оси y, правый слой внезапно нарисован выше слоя, который должен быть сверху.

Я попытался использовать разные значения zPosition.Ничего такого.Мое другое предположение состояло в том, что, возможно, анимация правого слоя заканчивается после анимации для левого слоя и, следовательно, она рисуется сверху.Чтобы проверить это, я сначала применил преобразование для правого слоя, но результат все тот же.О, я также безуспешно пробовал транзакции CA.

Вот скриншот:

the problem

Как правильно анимировать несколько CALayers, сохраняя ихзаказать?

Спасибо, Марк.РЕДАКТИРОВАТЬ:

Вот код для преобразования.Я попытался отключить анимацию, но получил тот же результат.

[CATransaction begin];

[CATransaction setValue:(id)kCFBooleanTrue
                 forKey:kCATransactionDisableActions];

CATransform3D rotationAndPerspectiveTransform = CATransform3DIdentity;
rotationAndPerspectiveTransform.m34 = 1.0 / 400;
rotationAndPerspectiveTransform = CATransform3DRotate(rotationAndPerspectiveTransform, DegreesToRadians(70), 0, 1, 0);

 for(CALayer *layer in [self.layer sublayers]) {
    // transform the two layers
    layer.transform = rotationAndPerspectiveTransform;

}
[CATransaction commit];

1 Ответ

0 голосов
/ 15 февраля 2011

Вы пробовали переводить по оси z?Либо сделайте, чтобы ваш верхний слой имел большее число, либо ваш нижний слой имел бы более низкое или отрицательное число.Попробуйте что-то действительно большое для начала и посмотрите, решит ли это проблему.Затем сужайте поле, пока не подойдете к слою как можно ближе, не вызывая смещения, которое вы видите.Примерно так:

CATransform3D trans = CATransform3DIdentity;
trans.m34 = 1 / -900;

trans = CATransform3DTranslate(trans, 0.0f, 0.0f, -500.0f);

[lowerLayer setTransform:trans];

Недостатком является то, что если вы планируете складывать несколько слоев, вам, вероятно, придется использовать это минимальное поле и умножить его на количество слоев, которые вы используете.планирование отображения, заставляющее стек исчезать на расстоянии.Конечно, если это тот эффект, к которому вы стремитесь, это было бы хорошо.

...