#import <UIKit/UIKit.h>
@interface MyView : UIView
@end
#import "MyView.h"
@implementation MyView
-(void) drawRect:(CGRect)rect{
//1.取出上下文 --当前绘图的位置(设备)
CGContextRef context = UIGraphicsGetCurrentContext();
[self drawLine];
}
#pragma mark 绘制直线2,使用默认context进行绘图
-(void)drawLine2{
//1. 获取上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//2. 设置路径
//1)设置起始点
CGContextMoveToPoint(context, 50, 50);
//2)增加点
CGContextAddLineToPoint(context, 200, 200);
CGContextAddLineToPoint(context, 50, 200);
//3)关闭路径
CGContextClosePath(context);
//3 设置属性
/*
UIkit 默认会导入Core Grapthics,UIKit对常用的很多CG方法做了封装
UIColor setStroke 设置变形颜色
UIColor setFill 设置填充颜色
UIColor set 设置边线和填充颜色
*/
//设置边线
// [[UIColor redColor]setStroke];
//设置填充
// [[UIColor blueColor]setFill];
[[UIColor greenColor]set];
//4 绘制路径
CGContextDrawPath(context, kCGPathFillStroke);
}
#pragma mark 绘制直线
-(void) drawLine{
//提示:使用Ref声明的对象,不需要用*
//1. 获取上下文 - UIView对应的上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//2. 创建路径并设置路径(可变路径)
/**
注意:当我们开发动画的时候,通常需要指定对象运动的路线,然后由动画方法负责实现动画效果
因此,在动画开发中,需要熟练使用路径
*/
CGMutablePathRef path =CGPathCreateMutable();
//划线
// 1)设置起始点
CGPathMoveToPoint(path, NULL, 50, 50);
// 2)设置中间点
// 3)设置目标点
CGPathAddLineToPoint(path, NULL, 200, 200);
CGPathAddLineToPoint(path, NULL, 50, 200);
// 4) 设置封闭路径
// a) 直接指定目标点
//CGPathAddLineToPoint(path, NULL, 50, 50);
// b)使用关闭路径
CGPathCloseSubpath(path);
//3. 将路径添加到上下文
CGContextAddPath(context, path);
//4. 设置上下文属性(状态)
/**
设置线条颜色
red 0 ~ 1.0 red / 255
green 0 ~ 1.0 green / 255
blue 0 ~ 1.0 blue / 255
alpha 透明度 0 ~ 1.0
0 - 完全透明
1.0 ~ 完全不透明
提示:1)使用RGB颜色设置时,最好不要同时指定RGB和alpha,性能损耗
2) 默认线条和填充颜色都是黑色
*/
CGContextSetRGBStrokeColor(context, 1.0, 0, 0, 1.0);
CGContextSetRGBFillColor(context, 0, 1, 0, 1.0);
//设置线条宽度
CGContextSetLineWidth(context, 5.0f);
//设置线条的顶点样式
CGContextSetLineCap(context, kCGLineCapRound);
//设置线条的链接点样式
CGContextSetLineJoin(context, kCGLineJoinRound);
//设置线条虚线样式
/*
虚线参数
context:
phase:相位、虚线起始位置,通常使用0,从都开始画
lengths:长度数组
count lengths:数组个数
*/
CGFloat lengths[3] = {10,20,30};
CGContextSetLineDash(context, 0, lengths, 3);
//5. 绘制路径
/**
kCGPathStroke 画线(空心)
kCGPathFill 填充(实心)
kCGPathFillStroke 即画线又填充
*/
CGContextDrawPath(context, kCGPathFillStroke);
//6. 释放路径
CGPathRelease(path);
}
@end