2015-06-21 71 views
4

Apple已經使得線性和徑向梯度變得非常簡單,但是可以通過可定義的函數設置梯度的顏色嗎?在我的情況下,我想使對象的填充顏色隨x軸的正弦函數而變化。使用png作爲模式並不難,但我只是想知道是否有可能使漸變中的紅色,綠色和藍色分量沿着某個軸以一個正弦函數變化。由核心圖形中的三角函數定義的梯度

任何答案是讚賞。提前致謝。

+0

CGGradient只是CGShading的特例,版本,僅允許之類的功能。 https://developer.apple.com/library/mac/documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_shadings/dq_shadings.html#//apple_ref/doc/uid/TP30001066-CH207-SW15 –

回答

-1

當創建使用CAGradientLayer類的梯度,則可以使用colors屬性具有大量的顏色,並根據正弦函數變化的顏色分量。在每對連續顏色之間將會有線性插值,然而,當顏色(和位置)的數量足夠大時,這將不會被注意到。

下面是一個繪製正弦梯度的示例,它在紅色和藍色之間來回變化。

// Compute the colors using a sine step-size 
let samples = 100 
var colors = [CGColor]() 
for i in 0..<samples { 
    let component = CGFloat(0.5 + sin(Double(i)/Double(samples - 1) * 4.0 * M_PI)/2.0) 
    colors.append(UIColor(red: component, green: 0, blue: 1 - component, alpha: 1).CGColor) 
} 

// Create the gradient layer 
let gradientLayer: CAGradientLayer = CAGradientLayer() 
gradientLayer.colors = colors 

// Install the gradient layer   
gradientLayer.frame = self.view.bounds 
self.view.layer.insertSublayer(gradientLayer, atIndex: 0) 

最終結果如下所示。

Xcode simulator screenshot