我有一個視圖控制器(MagmaViewController
),它正在管理一個名爲MagmaView
的視圖。對於MagmaView
直接背襯層我已經指派我自己定製CALayer的子類,稱爲MagmaLayer
通過將以下內容的MagmaView
實現部分:在哪裏調用setNeedsDisplay以更新CALayer?
+ (Class)layerClass
{
return [MagmaLayer class];
}
我有一些自定義的圖紙,我想MagmaLayer
畫爲MagmaView
,所以我將一些繪圖代碼放入MagmaLayer
的-(void) drawInContext:(CGContextRef) context
方法中。問題是當我這樣做並運行模擬器時,MagmaView顯示爲空白。我在MagmaLayer
的-(void) drawInContext:(CGContextRef) context
方法中設置了一個斷點,看起來這個方法根本沒有被調用。
顯然,我很困惑setNeedsDisplay
命令的觸發畫圖的需求和位置。首先,我認爲,至少在CALayer的第一次出現時,如果CALayer是UIView的直接後備層,那麼不需要發出setNeedsDisplay
命令,並且任何UIView都可以確保其直接支持層是正確的在需要時繪製,並且只有非直接的CALayer支撐層需要特別注意確保它們自己繪製。這不是嗎?另外,我應該在什麼地方放置setNeedsDisplay
命令來使這個直接支持圖層MagmaLayer
自己畫? setNeedsDisplay
命令是否在MagmaView
的初始化方法中,這是在此處承載MagmaLayer
的視圖?或者我應該走進更遠的鏈條,並把setNeedsDisplay
命令MagmaViewController
,管理MagmaView
的視圖控制器,例如,控制器的viewWillAppear
方法?