2012-06-01 34 views
0

我創建了一個自定義UIView,我最終將有10個區域,用戶可以點擊。當一個區域被挖掘時,我想疊加一個低alpha層來表示它們的選擇。CALayer不繪製在自定義UIView的範圍內

不幸的是,當我點擊一個部分時,我創建的CALayer正在繪製在我的自定義視圖的邊界之外。看起來好像我的x和y座標都是關閉的。

這是我的自定義視圖內drawRect方法:

- (void)drawRect:(CGRect)dirtyRect 
{ 
    if (touchPoint.x > 0 || touchPoint.y > 0){ 
     CGRect bounds = [self bounds]; 

     float widthOfArea = bounds.size.width/10.0; 

     float sectionNumber = round(touchPoint.x/widthOfArea); 

     touchOverlayLayer = [[CALayer alloc] init]; 

     [touchOverlayLayer setBounds:CGRectMake(0.0, 0.0, widthOfArea, bounds.size.height)]; 

     [touchOverlayLayer setPosition:CGPointMake(widthOfArea * sectionNumber, self.bounds.origin.y)]; 

     UIColor *greyish = [UIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:.5]; 

     CGColorRef cggreyish = [greyish CGColor]; 

     [touchOverlayLayer setBackgroundColor:cggreyish]; 

     [[self layer] addSublayer:touchOverlayLayer]; 
    } 
} 

而得到的顯示附接。 Layers not drawing in the correct place

+0

我應該添加,我可以通過創建一個100x100的矩形和setPostion來簡化它:CGPointMake(0.0,0.0),我得到了非常相似的結果。 –

回答

4

setPosition將圖層的錨點放在位置上。圖層的默認錨點是中心。這與你所看到的非常吻合。

您可以將錨點設置爲0,0然後設置位置,你應該沒問題。

下面是錨點等的簡要說明。

這有點棘手。框架,邊界和位置都捆綁在一起。在你的情況下,你可以設置圖層的框架,你會沒事的,當你要旋轉或以其他方式轉換圖層時,通常會使用錨點 - 它將成爲轉換的起點。如果您更改了錨點,它會移動該圖層,但是您將設置該位置,然後再將其移回。這個文檔有點弱,但網上有很多例子。

定位點成爲所有事情發生的位置。所以如果你設置了位置,圖層就會移動,以便它的錨點位於該位置。如果旋轉層,它繞錨點等

+0

立即解決了我的問題。謝謝一堆。爲了讓我明白,我有點不清楚anchorPoint屬性代表什麼。我意識到我正在設置子圖層上的錨點,但是如何將圖層的位置移動到父圖層的位置?我的假設是,我需要修改父視圖的一些屬性...我已經閱讀了Apple文檔,但我認爲我錯過了一些東西。 –

+0

這有點棘手。框架,邊界和位置都捆綁在一起。在你的情況下,你可以設置圖層的框架,你會沒事的,當你要旋轉或以其他方式轉換圖層時,通常會使用錨點 - 它將成爲轉換的起點。如果您更改了錨點,它會移動該圖層,但是您將設置該位置,然後再將其移回。這個文檔有點弱,但網上有很多例子。 – jrturton

+0

我沒有真正回答你的問題。定位點成爲所有事情發生的位置。所以如果你設置了位置,圖層就會移動,以便它的錨點位於該位置。如果旋轉圖層,它會圍繞錨點旋轉等。 – jrturton

0

只需添加僅此行

touchOverlayLayer.anchorPoint = CGPointMake(0,0);

默認anchorPoint是0.5,0.5意味着在圖層的中心。