2011-11-18 4 views
-1

Я новичок в программировании на iPhone. Я хочу использовать CATiledLayer для загрузки изображения. Я создаю подкласс класса UIView и в методе инициализации этого класса, я пишу,CALayer не относится к классу CATiledLayer

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

Но когда я пишу

 tiledLayer.levelsOfDetail = 4; 

Это дает мне ошибку, что [CALayer setLevelsOfDetail]: непризнанные селектор направлен например 0xcd04450

Так, чтобы проверить класс-тип TiledLayer, я пишу следующие заявления:

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

Но он печатает CALayer вместо CATiledLayer. Почему это так?? Что мне не хватает? Теперь я застрял здесь. :(

ответ

1

Применение приведения типа к указателю в Objective-C не имеет никакого эффекта во время выполнения (это имеет некоторый эффект во время компиляции, поэтому этот синтаксис все еще используется в разы).

Итак, ваш «приведение типа "на самом деле не делает приведение типа. это просто информирует компилятор (в той одной строке только кода), что это CATiledLayer и не CALayer, как это было заявлено. фактический объект действительно еще CATiledLayer.

Чтобы изменить класс self.layer, вы определяете статический метод для возврата класса:

@implementation MyView 

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

@end 

И теперь, когда создается слой для любого MyView, например, это будет CATiledLayer вместо CALayer.

Смежные вопросы