Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为什么此CALayer不显示图像?_Iphone_Cocoa_Core Animation - Fatal编程技术网

Iphone 为什么此CALayer不显示图像?

Iphone 为什么此CALayer不显示图像?,iphone,cocoa,core-animation,Iphone,Cocoa,Core Animation,你们能告诉我为什么这个代码没有显示图像吗 CALayer *layerBack = [CALayer layer]; addedObject = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:[NSString stringWithFormat: @"%@%d", PREFIX, number] ofType:@"png"]]; layerBack.bounds=CGRec

你们能告诉我为什么这个代码没有显示图像吗

CALayer *layerBack = [CALayer layer];

addedObject = [[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] 
    pathForResource:[NSString stringWithFormat: @"%@%d", PREFIX, number] ofType:@"png"]];

layerBack.bounds=CGRectMake(0.0f,0.0f,selectedImage.size.height,selectedImage.size.width);
layerBack.position=CGPointMake(200,200);

layerBack.contents = (id)selectedImage.CGImage;
// in theory I think this line should be equal to selectedImage.CGImage, but when I do that, Xcode shows me an error!

[self.view.layer addSublayer:layerBack];

[layerBack display];
这种石英材料快把我逼疯了!请帮忙


是的,图像在那里并且正在工作,但是在这段代码之后我看到的只是一个空白屏幕。

首先,我认为你必须将CGImage转换为id

layerBack.contents = (id)selectedImage.CGImage;
第二,我认为您必须将层添加到视图内容层

[self.view.layer addSublayer:layerBack];

但我一直在使用自定义UIViews类的+(类)layerClass;生成自定义层来布局自己的子层,但这可能只是我的问题

我假设此代码来自您的视图控制器,并且在此之前它的视图已正确构造(否则,您将向nil发送消息)。另外,我假设上面的
addedObject
是指
selectedImage
。我突然想到的一件事是

[layerBack display];
应替换为

[layerBack setNeedsDisplay];
从,关于
-显示:

您不应该调用此方法 直接的


《核心动画编程指南》的章节中有更多关于设置这样的层内容的内容。

选择的图像是什么以及它与addedObject的关系如何?从我所看到的,你得到了一个图像,但是在图层上添加了一个完全不同的,不相关的图像,可能是一个空白的

您是否注意到Xcode提供给您的消息?

桥接它:

layerBack.contents = (__bridge id)selectedImage.CGImage;

谢谢我做了两次修改,但图层仍然没有显示。如果我可以问一下,你能,在任何机会,请寄给我这个类你已经创建?如果可以,请把它寄到“utugau-->atI已将您的建议添加到原始帖子中,因为我已对它们进行了测试,代码仍然没有显示任何内容。为什么不使用视图,特别是UIIMageView和它的imageNamed方法,它将代码减少到大约三行?因为我必须在最后将最终结果传输到一个文件,并且很难在最后将转换从UIView复制到CGLayers。当我将代码复制到。。。因为我在这里输入代码时更改了一些变量以澄清…感谢您的帮助。David Duncan在cocoa dev邮件列表中回答了这个问题:默认情况下,这将删除您刚才设置的内容。调用-setNeedsDisplay或-display将导致层生成内容并将内容属性设置为该操作的结果。如果手动设置内容属性,则永远不要在该层上调用-setNeedsDisplay或-display,否则设置的内容将丢失。您可以通过实现一些委托方法或子类化CALALER来避免这一点,但是在执行这一过程时,通过保持对CalAube的控制通常更容易避免问题。在COCOA的新的ARC(自动引用计数)中使用<代码>(SythBaseID)/CODE >在COCOA和核心基础之间传输对象。(或通常为C),更多信息请参阅苹果的官方文档或迈克·阿什的博客文章。