我是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。为什么会这样?我错过了什么? 现在我被困在这里。 :(
答案 0 :(得分:1)
对Objective-C中的指针应用类型转换在运行时没有任何影响(它在编译期间确实有效,因此有时会使用此语法)。
所以,你的“类型转换”实际上并没有进行类型转换。它只是通知编译器(仅在一行代码中),这是CATiledLayer
而不是CALayer
,因为它已被声明。实际的对象实际上仍然是CATiledLayer
。
为了更改self.layer
的类,您可以定义一个静态方法来返回该类:
@implementation MyView
+ (Class)layerClass
{
return [CATiledLayer class];
}
@end
现在,当创建任何MyView
实例的图层时,它将是CATiledLayer
而不是CALayer
。