CALayer未经过类型转换为CATiledLayer

时间:2011-11-18 11:30:05

标签: xcode catiledlayer

我是iPhone编程新手。我想使用CATiledLayer加载图像。 我正在创建UIVIew类的子类,并且在该类的init方法中,我正在编写,

      CATiledLayer *tiledLayer = (CATiledLayer *)[self layer];

但是当我写作时

      tiledLayer.levelsOfDetail = 4;

它给了我错误     [CALayer setLevelsOfDetail:]:无法识别的选择器发送到实例0xcd04450

因此,为了检查tilesLayer的类类型,我正在编写以下语句:

NSString *pqr = [[NSString alloc]initWithFormat:@"%@", [tiledLayer class]];
NSLog(pqr);

但它打印CALayer而不是CATiledLayer。为什么会这样?我错过了什么? 现在我被困在这里。 :(

1 个答案:

答案 0 :(得分:1)

对Objective-C中的指针应用类型转换在运行时没有任何影响(它在编译期间确实有效,因此有时会使用此语法)。

所以,你的“类型转换”实际上并没有进行类型转换。它只是通知编译器(仅在一行代码中),这是CATiledLayer而不是CALayer,因为它已被声明。实际的对象实际上仍然是CATiledLayer

为了更改self.layer的类,您可以定义一个静态方法来返回该类:

@implementation MyView

+ (Class)layerClass
{
  return [CATiledLayer class];
}

@end

现在,当创建任何MyView实例的图层时,它将是CATiledLayer而不是CALayer