今天主要是学习绘图的相关知识绘制单线,多条线、绘制图形
都要添加一个类,类名为DrawView
class是UIView,把XIB的VIew的Class改为类名进行关联
1、绘制单线
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.points = [NSMutableArray array];
}
return self;
}
-(void)awakeFromNib{
self.points = [NSMutableArray array];
NSLog(@"awakeFromNib");
}
//控件显示时会执行一次 当执行setNeedsDisplay
- (void)drawRect:(CGRect)rect {
//********* 绘制固定线的代码
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, 100, 100);
CGContextAddLineToPoint(context, 200, 200);
CGContextAddLineToPoint(context, 375, 0);
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
CGContextSetLineWidth(context, 3);
//绘制 kCGPathStroke描边 kCGPathFill填充 kCGPathFillStroke 既填充右描边
CGContextDrawPath(context, kCGPathStroke);
// ********************手绘********************
CGContextRef c = UIGraphicsGetCurrentContext();
for (int i=0; i<<span se-mark="1">self.points.count; i++) {
CGPoint p = [self.points[i] CGPointValue];
if (i==0) {
//第一次把画笔移动到某个位置
CGContextMoveToPoint(c, p.x, p.y);
}else{
CGContextAddLineToPoint(c, p.x, p.y);
}
}
CGContextSetStrokeColorWithColor(c, [UIColor redColor].CGColor);
//绘制
CGContextDrawPath(c, kCGPathStroke);
}
-(void)touchesBegan:(NSSet<<span se-mark="1">UITouch *> *)touches withEvent:(UIEvent *)event{
UITouch *t = [touches anyObject];
CGPoint p = [t locationInView:self];
[self.points addObject:[NSValue valueWithCGPoint:p]];
//刷新显示
[self setNeedsDisplay];
}
-(void)touchesMoved:(NSSet<<span se-mark="1">UITouch *> *)touches withEvent:(UIEvent *)event{
UITouch *t = [touches anyObject];
CGPoint p = [t locationInView:self];
[self.points addObject:[NSValue valueWithCGPoint:p]];
//刷新显示
[self setNeedsDisplay];
}
-(void)touchesEnded:(NSSet<<span se-mark="1">UITouch *> *)touches withEvent:(UIEvent *)event{
UITouch *t = [touches anyObject];
CGPoint p = [t locationInView:self];
[self.points addObject:[NSValue valueWithCGPoint:p]];
//刷新显示
[self setNeedsDisplay];
}
2、绘制多线
设置line类,可变数组记录所绘制的线,数组初始化
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.points = [NSMutableArray array];
}
return self;
}
-(void)awakeFromNib{
self.points = [NSMutableArray array];
NSLog(@"awakeFromNib");
}
//控件显示时会执行一次 当执行setNeedsDisplay
- (void)drawRect:(CGRect)rect {
//********* 绘制固定线的代码
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, 100, 100);
CGContextAddLineToPoint(context, 200, 200);
CGContextAddLineToPoint(context, 375, 0);
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);
CGContextSetLineWidth(context, 3);
//绘制 kCGPathStroke描边 kCGPathFill填充 kCGPathFillStroke 既填充右描边
CGContextDrawPath(context, kCGPathStroke);
// ********************手绘********************
CGContextRef c = UIGraphicsGetCurrentContext();
for (int i=0; i<<span se-mark="1">self.points.count; i++) {
CGPoint p = [self.points[i] CGPointValue];
if (i==0) {
//第一次把画笔移动到某个位置
CGContextMoveToPoint(c, p.x, p.y);
}else{
CGContextAddLineToPoint(c, p.x, p.y);
}
}
CGContextSetStrokeColorWithColor(c, [UIColor redColor].CGColor);
//绘制
CGContextDrawPath(c, kCGPathStroke);
}
-(void)touchesBegan:(NSSet<<span se-mark="1">UITouch *> *)touches withEvent:(UIEvent *)event{
UITouch *t = [touches anyObject];
CGPoint p = [t locationInView:self];
[self.points addObject:[NSValue valueWithCGPoint:p]];
//刷新显示
[self setNeedsDisplay];
}
-(void)touchesMoved:(NSSet<<span se-mark="1">UITouch *> *)touches withEvent:(UIEvent *)event{
UITouch *t = [touches anyObject];
CGPoint p = [t locationInView:self];
[self.points addObject:[NSValue valueWithCGPoint:p]];
//刷新显示
[self setNeedsDisplay];
}
-(void)touchesEnded:(NSSet<<span se-mark="1">UITouch *> *)touches withEvent:(UIEvent *)event{
UITouch *t = [touches anyObject];
CGPoint p = [t locationInView:self];
[self.points addObject:[NSValue valueWithCGPoint:p]];
//刷新显示
[self setNeedsDisplay];
}
3、绘制图形
- (void)drawRect:(CGRect)rect {
CGContextRef c = UIGraphicsGetCurrentContext();
//矩形
// CGContextAddRect(c, CGRectMake(100, 100, 200, 100));
// CGContextSetStrokeColorWithColor(c, [UIColor redColor].CGColor);
// CGContextSetFillColorWithColor(c, [UIColor greenColor].CGColor);
// CGContextSetLineWidth(c, 5);
// CGContextDrawPath(c, kCGPathFillStroke);
//圆形
// CGContextAddEllipseInRect(c, CGRectMake(100, 100, 100, 100));
//
// CGContextDrawPath(c, kCGPathFillStroke);
//绘制扇形
CGContextMoveToPoint(c, 100, 100);
// 上下文 中心点 半径 开始 结束 顺逆时针
CGContextAddArc(c, 100, 100, 50, 0, 90*M_PI/180, 0);
CGContextDrawPath(c, kCGPathFill);
// 绘制图片
UIImage *image = [UIImage imageNamed:@"0.jpg"];
[image drawInRect:CGRectMake(200, 200, 100, 100)];
//绘制文本
NSDictionary *dic = @{NSFontAttributeName: [UIFont systemFontOfSize:30],NSForegroundColorAttributeName:[UIColor colorWithRed:135.0/255 green:181.0/255 blue:13.0/255 alpha:1]};
[@"hahahaha" drawInRect:CGRectMake(200, 300, 100, 100) withAttributes:dic];
}
4、三原色
三原色配色表
色光三原色(加色法)
(红)+(绿)=(黄)
(蓝)+(绿)=(青)
(红)+(蓝)=(品红)
(绿)+(蓝)+(红)=(白)
印刷/颜料三原色(减色法)
(青)+(品红)=(蓝)
(品红)+(黄)=(红)
(黄)+(青)=(绿)
(青)+(品红)+(黄)=(黑)
- (void)drawRect:(CGRect)rect{
绘制固定线的代码
//获取上下文
CGContextRef context =UIGraphicsGetCurrentContext();
//画笔移动到某个位置
CGContextMoveToPoint(context,100, 100);
//画到某个位置
CGContextAddLineToPoint(context, 200,200);
CGContextAddLineToPoint(context,375, 0);
//设置画笔颜色
CGContextSetStrokeColorWithColor(context,[UIColor redColor].CGColor);
//设置画笔粗细
CGContextSetLineWidth(context, 3);
//绘制 kCGPathStroke描边kCGPathFill填充 kCGPathFillStroke 既填充右描边
CGContextDrawPath(context,kCGPathStroke);
二、制作其它图形
CGContextRefc= UIGraphicsGetCurrentContext();
//矩形
// CGContextAddRect(c, CGRectMake(100, 100, 200,100));
// CGContextSetStrokeColorWithColor(c, [UIColorredColor].CGColor);
// CGContextSetFillColorWithColor(c, [UIColorgreenColor].CGColor);
// CGContextSetLineWidth(c, 5);
// CGContextDrawPath(c,kCGPathFillStroke);
//圆形
// CGContextAddEllipseInRect(c, CGRectMake(100,100, 100, 100));
//
// CGContextDrawPath(c,kCGPathFillStroke);
//绘制扇形
// CGContextMoveToPoint(c, 100, 100);
// 上下文中心点 半径 开始 结束 顺逆时针
CGContextAddArc(c,100,100,50,0,90*M_PI/180,0);
CGContextDrawPath(c,kCGPathFill);
// 绘制图片
UIImage*image = [UIImageimageNamed:@"0.jpg"];
[image drawInRect:CGRectMake(200,200,100,100)];
//绘制文本
NSDictionary *dic= @{NSFontAttributeName:[UIFont systemFontOfSize:30],NSForegroundColorAttributeName:[UIColorcolorWithRed:135.0/255green:181.0/255blue:13.0/255alpha:1]};
[@"hahahaha"drawInRect:CGRectMake(200,300,100,100)withAttributes:dic];
三、几种数据初始化方法的区别:
初始化方法:
1.init:代码创建对象
2.initWithFrame: 控件特有的方法代码创建控件时执行
3.intWithCoder:sb和xib创建控件时执行 子控件没初始化好
4.aweakFromNib:sb和xib创建控件时执行 子控件初始化好了
学习ios 重要还是要理清楚思路 在做或者看老师代码的时候 自己多想想为什么 不要自己看着就抄 另外还是要推荐一下 蓝懿IOS这个培训机构 和刘国斌老师刘国斌老师还是很有名气的,听朋友说刘老师成立了蓝懿iOS,,老师讲课方式很独特,能够尽量让每个人都能弄明白,有的比较难懂的地方,如果有的地方还是不懂得话,老师会换个其它方法再讲解,这对于我们这些学习iOS的同学是非常好的,多种方式的讲解会理解得更全面,这个必须得给个赞,嘻嘻,还有就是这里的学习环境很好,很安静,可以很安心的学习,安静的环境是学习的基础,小班讲课,每个班20几个学生,学习氛围非常好,每天都学到9点多才离开教室,练习的时间很充裕,而且如果在练习的过程中有什么困难,随时可以向老师求助,不像其它机构,通过视频教学,有的甚至学完之后都看不到讲师本人,问点问题都不方便,这就是蓝懿与其它机构的区别,相信在刘国斌老师的细心指导下,每个蓝懿学员都能找到满意的工作,加油!
写博客第三十九天;
QQ:565803433