【发布时间】:2012-04-21 02:24:19
【问题描述】:
这个让我难过。我有一个CALayer,我在UIViewController 的viewDidLoad 方法中创建它,如下所示:
- (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? -
只是一个简单的尝试让它渲染。
-
哦,等等,我明白你的意思了。如果我删除
[_imageLayer setNeedsDisplay];,它工作得很好。那里发生了什么? -
我的意思是,setNeedsDisplay 需要在 superview 上调用,而不是在 subview 上。
标签: objective-c ios cocoa-touch calayer