CALayer不呈现内容

时间:2012-04-08 06:41:03

标签: objective-c ios cocoa-touch calayer

这个让我很难过。我有一个CALayer我用UIViewController的{​​{1}}方法创建了这样的内容:

viewDidLoad

{1}}从笔尖加载并放入由代码创建的- (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变得可见时,UITabBarController不会呈现其CALayer内容。我UIImage呈现UIViewController的唯一方法是在CALayer可见后将其内容设置为UIImage,例如{{1} }} 方法。

我更愿意在UIImage方法中完成所有设置(这不是它的用途吗?)。如何让UIViewController呈现其内容?

1 个答案:

答案 0 :(得分:3)

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

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

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