2013-06-19 39 views
0

我有一個UIView,我在drawRect方法中繪製東西。我想覆蓋CALayer通過UIView CALayer(self.layer),這將繪製drawRect中繪製的東西的一個子集。基本上,我在drawRect中繪製了很多圈子,我想在疊加層上突出顯示它們。我從UIView屬性的模型對象中獲取圓的座標。如何在UIView的實現文件中實現drawLayer:InContext?

我的第一次嘗試是一個子層s添加到UIView的層,其代表設置爲的UIView並在需要時調用其setNeedsDisplay方法,但drawLayer:InContext由兩個層(s和self.layer)調用。這不起作用:

-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx { 
    if (layer == s) { 
    // draw stuffs for s 
    } 
    else if (layer==self.layer) { 
    // do nothing 
    } 
} 

導致一個黑色的UIView。我想從一個可以訪問我的數據模型的地方繪製s,以及其他對繪圖有用的變量(行的寬度..)。我有點解決了這個問題,將s的圖形移動到了一個單獨的對象上,但是這迫使我也在這個對象中設置模型的指針,並且複製其他參數。

所以我的問題是:在UIView使用drawRect繪製其內容,如何添加一個委託的子層是相同的UIView?

回答

1

您需要繼承UIView,並在該子類中使用您自己的CALayer子類覆蓋+ (Class)layerClass。然後,UIView將在創建其背景層時使用該子類。您的CALayer子類將會覆蓋drawLayer

您可以將此CALayer子類(接口和實現)放入您的UIView子類中。