2011-08-30 34 views
6

我想在圓圈中排列12個物體,以便每個物體與其逆時針方向的鄰居重疊。iOS/Core-Animation:12個重疊的圓圈卡片

事情是這樣的:

enter image description here

問題是,如果我只是靠繪製順序上,其中一人總是要完全放在上面,在這種情況下,紅色的12點'時鐘。

我已經使用

{ 
     GlowButton* G = glowButton[ 0 ]; 

     float theta = 0.3; 
     G.layer.transform = CATransform3DMakeRotation(theta, 0, 1, 0); 
    } 

在試圖繞垂直軸轉動,從而摺頁鄰居後面一側嘗試,但是這是行不通的。

我被告知這是因爲核心動畫不支持深度測試。

有沒有辦法做到這一點,而不闖入GL?

回答

6

我能想到的兩種方法來避免此問題:

各一半的對象
  1. 拆分。第一個繪製鄰居對象背後的那一半,然後在鄰居之上繪製這些半部分。

  2. 使用裁剪區域並分兩步繪製圓。第一個裁剪區域限制繪製到圖片的左半部分。第二個裁剪區域被限制在右半邊。每次您繪製所有對象。但是你必須從底部或頂部元素開始。

我不太清楚你在用Core Animation做什麼,所以其中一種方法可能更適合或需要一些適應。

+0

由於乘以層像素RGBA在掩模像素!我已經做了一個變種,它的作品非常漂亮。 –

4

我現在已經完美地工作了。我很放心,不必去GL。帶着面具只允許右半邊是可見的寶石 -

enter image description here

我基本繪製的第一個(在12點紅色)。

然後我得出剩餘11

然後我再次提請第一個,這個時間設置的面具,只顯示左半部分。

for(int i = 0; i <= 12; i++) 
    { 
     for (int dullGlow = 0; dullGlow <= 1; dullGlow++) 
     { 
      BOOL isDull = (dullGlow == 0) ? YES : NO; 

      CALayer* L = [CALayer layer]; 

      CGImageRef dullImage = [ButtonImages dullImage: i % 12]; 
      CGImageRef glowImage = [ButtonImages glowImage: i % 12]; 

      L.contents = (id) (isDull ? dullImage : glowImage); 

      L.bounds = CGRectMake(0, 0, buttonSize, buttonSize); 

      L.opacity = (isDull ? 1.0 : 0.0); 

      if(i == 0 || i == 12) 
      { 
       CGFloat halfSize = buttonSize/2.0; 

       CGRect keepLeftHalf = CGRectMake(0, 0, 
               halfSize, buttonSize); 

       CGRect keepRightHalf = CGRectMake(halfSize, 0, 
                halfSize, buttonSize); 

       CALayer* maskLayer = [CALayer layer]; 
       maskLayer.frame = (i == 0) ? keepRightHalf : keepLeftHalf; 
       maskLayer.backgroundColor = [UIColor greenColor].CGColor; 

       maskLayer.edgeAntialiasingMask = 0x0; 

       [L setMask: maskLayer]; 
      } 

      [self.layer addSublayer: L]; 

      layers[ dullGlow ] [ i ] = L; 

     } // dullGlow 

    } // i 

設置爲抗鋸齒的所有4個邊緣0條款edgeAntialiasingMask的4個最低顯著位 - 沒有這條線,我得到一個縫。

如果有人能夠解釋掩蔽過程的機制 - 儘管我達到了正確的結果,我會非常感謝,但我是通過試驗和錯誤來完成的。

請注意,蒙版設置爲(不透明)綠色,並且它是可見的蒙版區域 - 即第一遍綠色矩形覆蓋圖像的右半部分,正是這種愛顯示。

我猜測,對每一個像素它是由α值