Graphics Context是图形上下文,可以将其理解为一块画布,我们可以在上面进行绘画操作,绘制完成后,将画布放到我们的view中显示即可,view我们可以把它看作是一个画框.下面是我学习的时候小Demo,给大家分享一下,希望对大家在这方便学习有所帮助,具体实现过程我就直接贴出代码, 代码中我写了注释一目了然.下面我们先看部分的效果图:
代码实现:
① 文字
let magentaColor = UIColor.greenColor()
let myString:NSString = "我的剑就是你的剑"
let helveticaBold = UIFont.init(name: "HelveticaNeue-Bold", size: 30.0);
myString.drawAtPoint(CGPoint(x: 20, y: 100), withAttributes:[NSFontAttributeName: helveticaBold!, NSForegroundColorAttributeName: magentaColor])
② 直线
// 获取画布
let context = UIGraphicsGetCurrentContext()
// 线条颜色
CGContextSetStrokeColorWithColor(context, UIColor.redColor().CGColor)
// 设置线条平滑,不需要两边像素宽
CGContextSetShouldAntialias(context, false)
// 设置线条宽度
CGContextSetLineWidth(context, 2.0)
// 设置线条起点
CGContextMoveToPoint(context, 30, 200)
// 线条结束点
CGContextAddLineToPoint(context, 150, 200)
// 开始画线
CGContextStrokePath(context)
③ 矩形
/// 无框的
// 获取画布
let context = UIGraphicsGetCurrentContext()
// 设置矩形填充颜色: 蓝色
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0)
//填充矩形
CGContextFillRect(context, CGRect(x: 30, y: 260, width: 100, height: 60))
//执行绘画
CGContextStrokePath(context);
/// 有框的
// 矩形填充颜色:红色
CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0)
// 填充矩形
CGContextFillRect(context, CGRect(x: 30, y: 350, width: 100, height: 60))
// 画笔颜色:黑色
CGContextSetRGBStrokeColor(context, 0, 0, 0, 1)
// 画笔线条粗细
CGContextSetLineWidth(context, 1.0)
// 画矩形边框
CGContextAddRect(context,CGRect(x: 30, y: 350, width: 100, height: 60))
// 执行绘画
CGContextStrokePath(context)
④ 圆
// 获取画布
let context = UIGraphicsGetCurrentContext()
// 画圆
CGContextAddEllipseInRect(context, CGRectMake(50,420,100,100))
// 画笔颜色
CGContextSetRGBStrokeColor(context, 0.3, 0.7, 0, 1.0)
// 关闭路径
CGContextStrokePath(context)
⑤ 扇形与椭圆
// 获取画布
let context = UIGraphicsGetCurrentContext()
//画扇形,也就画圆,只不过是设置角度的大小,形成一个扇形
CGContextSetFillColorWithColor(context, UIColor.brownColor().CGColor)//填充颜色
//以10为半径围绕圆心画指定角度扇形
CGContextMoveToPoint(context, 160, 180)
CGContextAddArc(context, 180, 180, 30, 120, 200, 2)
CGContextClosePath(context);
CGContextDrawPath(context, CGPathDrawingMode.FillStroke) //绘制路径
//画椭圆
CGContextAddEllipseInRect(context, CGRectMake(200, 230, 100, 30)) //椭圆
CGContextDrawPath(context, CGPathDrawingMode.FillStroke)
⑥ 贝塞尔曲线
// 获取画布
let context = UIGraphicsGetCurrentContext()
// 二次曲线
CGContextMoveToPoint(context, 240, 380) // 设置path的起点
CGContextAddQuadCurveToPoint(context, 200, 300, 240, 420) //设置贝塞尔曲线的控制点坐标和终点坐标
CGContextStrokePath(context)
//三次曲线函数
CGContextMoveToPoint(context, 200, 300) //设置Path的起点
CGContextAddCurveToPoint(context,250, 280, 250, 400, 280, 300) //设置贝塞尔曲线的控制点坐标和控制点坐标终点坐标
CGContextStrokePath(context)
⑦ 图片添加水印
效果图:
代码实现部分
override func drawRect(rect: CGRect) {
imageView.image = UIImage(named:"bg")?
.waterMarkedImage("学习就要学会分享", corner: .TopLeft,
margin: CGPoint(x: 20, y: 20),
waterMarkTextColor: UIColor.blackColor(),
waterMarkTextFont: UIFont.systemFontOfSize(20),
backgroundColor: UIColor.clearColor())
imageView.frame = CGRect(x: 100, y: 100, width: 200, height: 300)
self.addSubview(imageView)
}
// 扩展UIImage
extension UIImage{
//水印位置枚举
enum WaterMarkCorner{
case TopLeft
case TopRight
case BottomLeft
case BottomRight
}
//添加水印方法
func waterMarkedImage(waterMarkText:String, corner:WaterMarkCorner = .BottomRight,
margin:CGPoint = CGPoint(x: 20, y: 20),
waterMarkTextColor:UIColor = UIColor.whiteColor(),
waterMarkTextFont:UIFont = UIFont.systemFontOfSize(20),
backgroundColor:UIColor = UIColor.clearColor()) -> UIImage{
let textAttributes = [NSForegroundColorAttributeName:waterMarkTextColor,
NSFontAttributeName:waterMarkTextFont,
NSBackgroundColorAttributeName:backgroundColor]
let textSize = NSString(string: waterMarkText).sizeWithAttributes(textAttributes)
var textFrame = CGRectMake(0, 0, textSize.width, textSize.height)
let imageSize = self.size
switch corner{
case .TopLeft:
textFrame.origin = margin
case .TopRight:
textFrame.origin = CGPoint(x: imageSize.width - textSize.width - margin.x, y: margin.y)
case .BottomLeft:
textFrame.origin = CGPoint(x: margin.x, y: imageSize.height - textSize.height - margin.y)
case .BottomRight:
textFrame.origin = CGPoint(x: imageSize.width - textSize.width - margin.x,
y: imageSize.height - textSize.height - margin.y)
}
// 开始给图片添加文字水印
UIGraphicsBeginImageContext(imageSize)
self.drawInRect(CGRectMake(10, 0, imageSize.width, imageSize.height))
NSString(string: waterMarkText).drawInRect(textFrame, withAttributes: textAttributes)
let waterMarkedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return waterMarkedImage
}