1

这个难倒我。我有一个我在 a的方法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];
}

UIViewControllernib 加载并放入UITabBarController在代码中创建的 a 中。

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

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

4

1 回答 1

3

您不需要setNeedsDisplay在图层或超级视图上使用它。

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

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

于 2012-04-08T07:10:08.803 回答