代码之家  ›  专栏  ›  技术社区  ›  Duck

为什么这个Calayer不显示图像?

  •  2
  • Duck  · 技术社区  · 16 年前

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

    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];
    

    这石英的东西快把我逼疯了!请帮助!

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

    4 回复  |  直到 14 年前
        1
  •  3
  •   Brad Larson    16 年前

    我假设这段代码来自您的视图控制器,并且在这之前它的视图已经被正确构造(否则,您将向nil发送消息)。而且,我认为 addedObject 上面,你是说 selectedImage . 我突然想到的一件事是

    [layerBack display];
    

    应替换为

    [layerBack setNeedsDisplay];
    

    CALayer documentation ,关于 -display:

    你不应该调用这个方法 直接。

    "Providing Layer Content" 一节的核心动画编程指南。

        2
  •  2
  •   Glenn Howes    16 年前

    首先我认为你必须把cgimage转换成id。

    layerBack.contents = (id)selectedImage.CGImage;
    

    其次,我认为您必须将层添加到视图内容层

    [self.view.layer addSublayer:layerBack];
    

    但是我总是使用我的自定义uiviews类的+(类)layerClass;来生成自定义层,这些层布局它们自己的子层,但也许这只是我自己。

        3
  •  1
  •   mahboudz    16 年前

    什么是selectedimage?它与addedobject有什么关系?从我所看到的,你得到了一个图像,但是然后添加一个完全不同的,不相关的图像,可能是一个空白的,到图层。

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

        4
  •  1
  •   NonatomicRetain    14 年前

    桥梁:

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