【问题标题】:Combining and flipping CALayers as subviews to a CATransformLayer将 CALayers 作为子视图组合并翻转到 CATransformLayer
【发布时间】:2012-11-29 22:53:16
【问题描述】:

根据早期的 stackoverflow 建议,我正在尝试使用添加到 CATransformLayer 的 CALayers 创建一张扑克牌。这个想法是创建前后 CALayer 并将它们组合在 CATransformLayer 中,然后可以旋转、翻转等,并自动显示正确的一面。下面是尝试创建一张正面为绿色背面为红色的单张卡片的示例代码。

红色背面围绕 Y 轴翻转,使其背对绿色正面。绿色前面的 calayer 的 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);

}

【问题讨论】:

    标签: catransform3d catransformlayer


    【解决方案1】:

    发现问题,必须将transform应用到sublayerTransform属性,如:

    cardView.layer.sublayerTransform = ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多