2011-11-18 60 views
-1

我是iPhone編程的新手。我想使用CATiledLayer來加載圖像。 我創造UIView類的子類,並在該類的init方法,我寫這封信,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