2015-06-21 39 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