-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);

ただし、CATiledLayer の代わりに CALayer を出力します。なんでそうなの??私は何が欠けていますか?? 今、私はここで立ち往生しています。:(

4

1 に答える 1

1

Objective-C でポインターに型キャストを適用しても、実行時には影響がありません (コンパイル時に何らかの影響があるため、この構文はまだ使用される場合があります)。

したがって、「タイプキャスト」は実際にはタイプキャストを行っていません。これは、これが a であり、宣言されているCATiledLayera ではないことをコンパイラに通知するだけです (コードの 1 行のみ) 。CALayer実際のオブジェクトは実際にはCATiledLayer.

のクラスを変更するには、クラスself.layerを返す静的メソッドを定義します。

@implementation MyView

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

@end

これで、任意のMyViewインスタンスのレイヤーが作成されると、CATiledLayerではなく になりCALayerます。

于 2012-01-07T20:23:19.273 に答える