CALayer не приводится к типу в CATiledLayer - PullRequest
0 голосов
/ 18 ноября 2011

Я новичок в программировании 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. Почему это так?? Что мне не хватает ?? Теперь я застрял здесь. (

1 Ответ

1 голос
/ 08 января 2012

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

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

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

@implementation MyView

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

@end

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

...