无法让 CALayer 在 UIView 中显示

Posted

技术标签:

【中文标题】无法让 CALayer 在 UIView 中显示【英文标题】:Cannot get CALayer to display in UIView 【发布时间】:2013-01-09 12:57:28 【问题描述】:

我有一个简单的单视图应用程序,由于某种原因,我无法在应用程序的UIView 中显示CALayer。视图的背景颜色正确,但CALayer 中的图像不可见。我已经在调试器中逐步完成了代码,并且我确信图像正在正确加载。如果我不使用CALayer 而不是使用UIImageView,那么一切都会如您所愿。

这是来自我的UIViewController 子类的代码。你知道我做错了吗?

- (void)viewDidLoad

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor darkGrayColor];

    CALayer* cardLayer = [self layerForCard];

    [self.view.layer addSublayer:cardLayer];


- (CALayer *)layerForCard

    UIImage* cardImage = [UIImage imageNamed:@"card1.jpg"];
    CGSize cardSize    = cardImage.size;
    CGRect cardRect    = CGRectMake(.0, .0, cardSize.width, cardSize.height);

    // Container Layer
    CALayer *containerLayer = [CALayer layer];
    containerLayer.bounds   = cardRect;
    containerLayer.opacity  = 1.0;

    // Image Layer
    CALayer *imageLayer = [CALayer layer];
    imageLayer.bounds = cardRect;
    imageLayer.contentsGravity = kCAGravityResizeAspectFill;
    imageLayer.contents = CFBridgingRelease(cardImage.CGImage);

    [containerLayer addSublayer:imageLayer];

    return containerLayer;

【问题讨论】:

【参考方案1】:

要么设置正确的锚点,要么使用

containerLayer.frame = cardRect;
..
imageLayer.frame = cardRect;

而不是

containerLayer.bounds = cardRect;
..
imageLayer.bounds = cardRect;

【讨论】:

以上是关于无法让 CALayer 在 UIView 中显示的主要内容,如果未能解决你的问题,请参考以下文章

使用 CALayer 的 UIView 没有出现阴影

UIView和CALayer的选择

有没有办法让 CALayer 的动作字典永久优先于其 UIView 委托?

CALayer1-简介

UIView与CALayer的区别

如何让我的 UIView 使用我的自定义 CALayer 作为其支持层?