【问题标题】:CALayer is not type-casted to CATiledLayerCALayer 没有类型转换为 CATiledLayer
【发布时间】:2011-11-18 11:30:04
【问题描述】:

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

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

但是当我写作的时候

      tiledLayer.levelsOfDetail = 4;

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

所以为了检查 tiledLayer 的类类型,我写了以下语句:

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

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

【问题讨论】:

    标签: xcode catiledlayer


    【解决方案1】:

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

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

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

    @implementation MyView
    
    + (Class)layerClass
    {
      return [CATiledLayer class];
    }
    
    @end
    

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

    【讨论】:

      猜你喜欢
      • 2012-06-20
      • 1970-01-01
      • 2018-02-15
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 2019-02-10
      • 2021-09-22
      相关资源
      最近更新 更多