在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()

  下面是效果图

posted @ 2016-04-07 17:27  torrescx  阅读(355)  评论(0编辑  收藏  举报