2015-08-29 57 views
1

我有兩個CAShapeLayer S上形成如下顯示:如何旋轉一個圓形的CAShapeLayer弧?

enter image description here

它們與這段代碼創建:

CALayer *layer = [loadingView layer]; 
CAShapeLayer *circle = [CAShapeLayer layer]; 
[circle setPath:[[UIBezierPath bezierPathWithOvalInRect:CGRectMake(5, 5, loadingView.bounds.size.width - 10, loadingView.bounds.size.height - 10)] CGPath]]; 
[circle setStrokeColor:[UIColorFromRGB(0xffffff, .15) CGColor]]; 
[circle setLineWidth:5]; 
[circle setFillColor:[[UIColor clearColor] CGColor]]; 
[layer addSublayer:circle]; 

CAShapeLayer *arc = [CAShapeLayer layer]; 
[arc setPath:[[UIBezierPath bezierPathWithArcCenter:CGPointMake(27, 27) radius:22 startAngle:1.25*M_PI endAngle:1.75*M_PI clockwise:YES] CGPath]]; 
[arc setStrokeColor:[UIColorFromRGB(0xffffff, .8) CGColor]]; 
[arc setLineWidth:5]; 
[arc setFillColor:[[UIColor clearColor] CGColor]]; 
[layer addSublayer:arc]; 

我想對於較小的,不透明的弧線保留它的大小和無限期地繞着圓圈旋轉。我嘗試過應用一些transform.rotation動畫,我在otheranswers上找到了動畫,但是最終導致了旋轉到不可預知的方向。

我也試着以同樣的速度提高弧度strokeStartstrokeEnd,這個效果我首先得到了效果,但由於這些屬性的性質而無法循環進行。

這樣,如何執行此效果?

回答

1

這裏最好的選擇是旋轉你的整個圓圈。圍繞其中心旋轉loadingView,你會得到你想要的效果。您將獲得額外的好處,甚至可以非常輕鬆地修改筆劃長度而不會混淆旋轉。

+0

這會工作,但它是不必要的,並導致父層必須重新繪製在每個框架的新方向。 –

1

默認情況下,形狀圖層中座標系的原點位於點(0,0),其邊界的尺寸爲0×0;當你給它一個路徑時,這些屬性都不會自動改變。你要給它的圓弧集中在(27,27),所以當你旋轉圖層時,繪製的圓弧圍繞圖層的實際中心旋轉,該中心是上方27點並且位於圓弧中心左側。

你最好的選擇是改變你創建弧形和定位圖層的方式。以(27,27)爲中心創建Bézier路徑,而不是以(0,0)-i.e爲中心。圖層的原點 - 並將弧層的位置設置爲其父層內的(27,27)。