繁体   English   中英

CALayer 不渲染内容

[英]CALayer not rendering contents

这个难倒我了。 我有一个CALayer ,它是在UIViewControllerviewDidLoad方法中创建的,如下所示:

- (void)viewDidLoad {

    [super viewDidLoad];

    UIImage* img = [UIImage imageNamed:@"foo.png"];

    _imageLayer = [[CALayer alloc] init];

    _imageLayer.bounds = CGRectMake( 0, 0, img.size.width, img.size.height);
    _imageLayer.position = CGPointMake( self.view.bounds.size.width/2.0, self.view.bounds.size.height/2.0 );

    _imageLayer.contents = (id)img.CGImage;
    _imageLayer.contentsScale = img.scale;

    [self.view.layer addSublayer:_imageLayer];
    [_imageLayer setNeedsDisplay];
}

UIViewController从 nib 加载并放入在代码中创建的UITabBarController中。

我的问题是,当UIViewController变得可见时, CALayer不会呈现其UIImage内容。 我可以让CALayer渲染UIImage的唯一方法是在UIViewController可见后将其内容设置为UIImage ,例如在viewDidAppear:方法中。

我真的更愿意在viewDidLoad方法中完成我的所有设置(这不是它的用途吗?)。 我如何让CALayer渲染它的内容?

您不需要在图层或超级视图上设置setNeedsDisplay

setNeedsDisplay告诉图层或视图它需要重绘其内容。 (对于视图,它将调用drawRect:来获取新内容;对于 CALayer,它将询问其委托。)请注意,这仅影响视图或层本身,而不影响其子项。

由于您直接为层提供内容,因此您不希望 CA 丢弃该内容并要求替换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM