这个让我很难过。我有一个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
呈现其内容?
答案 0 :(得分:3)
您在图层或超级视图上不需要setNeedsDisplay
。
setNeedsDisplay
告诉图层或视图需要重绘其内容。 (对于视图,它将调用drawRect:
来获取新内容;对于CALayer,它将询问其代理。)请注意,这仅影响视图或图层本身,而不影响其子代。
由于您直接为图层提供内容,因此您不希望CA放弃该内容并要求替换。