-1

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

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

但是当我在写

      tiledLayer.levelsOfDetail = 4;

它给了我错误 [CALayer setLevelsOfDetail:]: unrecognized selector sent to instance 0xcd04450

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

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

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

4

1 回答 1

1

在 Objective-C 中对指针应用类型转换在运行时没有影响(它在编译时确实有一些影响,所以有时仍然使用这种语法)。

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

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

@implementation MyView

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

@end

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

于 2012-01-07T20:23:19.273 回答