在iOS上绘制渐变
在iOS上绘制渐变,我们创建一个对象,但这一过程是通过调用Core Graphics C函数来完成的。
这里不是将路径对象提供给渐变,并让渐变来绘制自己,而是对当前图形上下文进行修剪(clip),然后从屏幕上的一点向另一个点绘制渐变。“修剪”是指将绘制范围局限于一个形状,这样可以防止渐变充满整个视图。
此外,除了提供一个应当据以绘制渐变的角度之外,还应当传送渐变的起始绘制坐标,此坐标应当转换为视图的坐标控件。
下面是在playground中的实现代码:
//: Playground - noun: a place where people can play import UIKit class MyView : UIView{ override func drawRect(rect: CGRect) { let colorSpace = CGColorSpaceCreateDeviceRGB() let context = UIGraphicsGetCurrentContext() let gradientStartColor = UIColor(red: 0.1, green: 0.1, blue: 0.8, alpha: 1) let gradientEndColor = UIColor(red: 1, green: 0.6, blue: 0.8, alpha: 1) let gradientcolors : CFArray = [gradientStartColor.CGColor,gradientEndColor.CGColor] let gradientLocations : [CGFloat] = [0.0,1.0] let gradient = CGGradientCreateWithColors(colorSpace, gradientcolors, gradientLocations) let pathRect = CGRectInset(self.bounds, 20, 20) let topPoint = CGPointMake(self.bounds.size.width/2, 20) let bottomPoint = CGPointMake(self.bounds.size.width/2 , self.bounds.size.height-20) let roundedRectanglePath = UIBezierPath(roundedRect: pathRect,cornerRadius: 4) CGContextSaveGState(context) roundedRectanglePath.addClip() CGContextDrawLinearGradient(context, gradient, bottomPoint, topPoint, .DrawsAfterEndLocation) CGContextRestoreGState(context) } } let viewRect = CGRect(x: 0, y: 0, width: 100, height: 100) let myEmptyView = MyView(frame:viewRect) myEmptyView.backgroundColor = UIColor.clearColor()
下面是效果图