Объединение и переключение CALayers как подпредставлений к CATransformLayer

Основываясь на предложении более раннего переполнения стека, я пытаюсь создать игральную карту, используя CALayers, добавленные в CATransformLayer. Идея состоит в том, чтобы создать передний и задний слои CALayers и объединить их в CATransformLayer, который затем можно вращать, переворачивать и т. Д., При этом автоматически отображается соответствующая сторона. Ниже приведен пример кода, который пытается создать одну карту с зеленым и красным фоном.

Красная спина переворачивается вокруг оси Y так, что она направлена ​​в сторону от зеленой передней части. Зеленый передний калибр имеет "более высокое" положение Z, чем красный задний.

Когда я делаю преобразование, я просто вижу карту в том, что кажется ей не перевернутой. Есть идеи, где я иду не так?

#define DEGREES_TO_RADIANS(angle) (angle * M_PI / 180.0)

- (void)viewDidLoad
{
    [super viewDidLoad];

    CATransformLayer *cardContainer = [CATransformLayer layer];

    cardContainer.bounds = CGRectMake(0,0, 150,200);


    CALayer *cardFront  = [CALayer layer];
    cardFront.frame     = cardContainer.bounds;

    cardFront.backgroundColor = [UIColor greenColor].CGColor;
    cardFront.borderColor = [UIColor blackColor].CGColor;
    cardFront.borderWidth = 2.0;
    cardFront.cornerRadius = 30.0;
    cardFront.zPosition = 2; // Put front of card on top relative to back of card
    cardFront.doubleSided = NO;
    [cardContainer addSublayer:cardFront];

    CALayer *cardBack  = [CALayer layer];
    cardBack.frame     = cardContainer.bounds;
    cardBack.backgroundColor = [UIColor redColor].CGColor;
    cardBack.zPosition = 1;
    cardBack.doubleSided = NO;

    // Flip cardBack image so it is facing outward and visible when flipped
    cardBack.transform = CATransform3DMakeRotation(DEGREES_TO_RADIANS(180),0.0,1.0,0.0);
    [cardContainer addSublayer:cardBack];

    UIView* cardView = [[UIView alloc] initWithFrame:cardContainer.bounds];
    cardView.center = CGPointMake(self.view.center.x, self.view.center.y);
    [cardView.layer addSublayer:cardContainer];
    [self.view addSubview:cardView];

    // Show the card flipped over (desired the red side to be showing, but instead shows green)
    cardView.layer.transform = CATransform3DMakeRotation(DEGREES_TO_RADIANS(180),0.0,1.0,0.0);

}

1 ответ

Решение

Обнаружив проблему, вы должны применить преобразование к свойству sublayerTransform, например:

cardView.layer.sublayerTransform =...

Другие вопросы по тегам