您的位置:首页 > 其它

DrawRect视图重绘的简要功能概述

2016-03-04 20:25 197 查看
drawRect的功能:绘制图形,图片,文字,裁剪图片
如果我们想使用drawRect方法,那么前提必须是这个类是UIView的子类,所以我们应该创建一个类继承自UIView,而drawRect就会自动的生成了,只需要将注释解开就行
在创建UIView对象的同时,会自动的调用一次这个方法
drawRect:方法不能手动显示调用,必须通过调用setNeedsDisplay
或者 setNeedsDisplayInRect ,让系统自动调该方法。
所以我们想要重新绘制这个图形时,不能手动的进行调用(没有效果),直接是用self
setNeedsDisplayInRect,系统会自动的调用这个方法,进行重新的绘制

以下我只写方法,然后可以在-
(void)drawRect:(CGRect)rect 方法中,进行调用即可

1.绘制普通的线条
- (void)drawLine{

//获取上下文

CGContextRef
context =
UIGraphicsGetCurrentContext();

//2.设置圆型

CGContextMoveToPoint(context,

50,

50);

//画到哪个点

CGContextAddLineToPoint(context,

100,

100);

//3.绘制,填充

CGContextStrokePath(context);

}

2.绘制带有属性的线

- (void)drawPropertyLine{

//获取上下文

CGContextRef
contect =UIGraphicsGetCurrentContext();

//设置线条宽度

CGContextSetLineWidth(contect,

15);

//设置线条颜色

CGContextSetStrokeColorWithColor(contect, [[UIColor

redColor]

CGColor]);

//给自身设置圆角,也就是两条线或者多条线的四个角

// CGContextSetLineCap(contect,kCGLineCapRound);

//给新加入的线的连接处设置圆角。

CGContextSetLineJoin(contect,

kCGLineJoinRound);

//

新加一条线

CGContextMoveToPoint(contect,

50,

50);

CGContextAddLineToPoint(contect,

100,

100);

CGContextAddLineToPoint(contect,

50,

200);

CGContextStrokePath(contect);

}

效果



3.绘制四边形,矩形

-(void)drawREct{

CGContextRef
content = UIGraphicsGetCurrentContext();

//前两个是x、y的坐标,后两个是width

,height、

CGContextAddRect(content,
CGRectMake(100,
100,
100,
100));

CGContextStrokePath(content);

}

效果



4、设置三角形

- (void)drawRectangle{

//1.获取上下文

CGContextRef
content =
UIGraphicsGetCurrentContext();

CGContextSetStrokeColorWithColor(content, [[UIColor

blueColor]

CGColor]);

CGContextMoveToPoint(content,

100,

100);

CGContextAddLineToPoint(content,

100,

150);

CGContextAddLineToPoint(content,
150,
150);

// CGContextAddLineToPoint(content, 100, 100); //回到原点可以用这句话来代替

//让点自动回到起始位置

CGContextClosePath(content);

//3.绘制,填充的是路径

CGContextStrokePath(content);

}



5、画图

- (void)drawRound{

CGContextRef
contect =
UIGraphicsGetCurrentContext();

//设置线条的宽度

CGContextSetLineWidth(contect,

20);
//设置画图路线的颜色

CGContextSetStrokeColorWithColor(contect, [[UIColor

greenColor]

CGColor]);

CGContextAddEllipseInRect(contect,

CGRectMake(100,

200,

100,

100));

//重新获取图形上下文

CGContextRef
contect2 =
UIGraphicsGetCurrentContext();

//设置填充颜色(每个颜色的值范围都是)

CGContextSetRGBFillColor(contect2,

0.5,

0.5,

0.5,

1);

CGContextStrokePath(contect);

CGContextAddEllipseInRect(contect2,

CGRectMake(100,

200,

100,

100));

CGContextFillPath(contect2);
}



//6. 画弧
- (void)drectRadian{

CGContextRef contect =
UIGraphicsGetCurrentContext();

//void CGContextAddArc(CGContextRef c, CGFloat x, CGFloat y, CGFloat radius, CGFloat startAngle, CGFloat endAngle, int clockwise)

//x,y为圆点坐标,startAngle为开始的弧度,开始弧度跟这个圆的大小有关,endAngle为
结束的弧度,结束弧度,跟弧度的大小有关,clockwise 0为顺时针,1为逆时针

//弧度跟这个圆的大小有关

CGContextAddArc(contect,
200,
300,
100,4,-M_PI_2,
1);

CGContextStrokePath(contect);
}



//绘制扇形
- (void)drectFan{

CGContextRef context =
UIGraphicsGetCurrentContext();

UIColor *aColor = [UIColor
colorWithRed:0
green:1
blue:1
alpha:1];

CGContextSetFillColorWithColor(context, aColor.CGColor);//填充颜色

//以10为半径围绕圆心画指定角度扇形

//这这句是形成扇形的关键

CGContextMoveToPoint(context,
200,
180);

CGContextAddArc(context,
200,
180,
100, -60
* M_PI /
180, -120
* M_PI /
180,
0);

CGContextClosePath(context);

CGContextDrawPath(context,
kCGPathFillStroke);
//绘制路径

}



在UITextView中,UITextView的对象有设置一个placeHolder占位符
首先新建一个类继承自UITextView,然后解开-
(void)drawRect:(CGRect)rect这个方法
@interface myTextView :
UITextView

在.m中
@implementation myTextView

// Only override drawRect: if you perform custom drawing.

// An empty implementation adversely affects performance during animation.

- (void)drawRect:(CGRect)rect
{

[super
drawRect:rect];

if (self.hasText)return;

[@"请输入文字"
drawAtPoint:rect.origin
withAttributes:@{NSForegroundColorAttributeName:[UIColor
greenColor]}];
}

然后让UIextView的光标跟着向下移动,并且让占位符的文字在检测到输入文字的时候,将文字去掉,则我们要将新建的对象,让当前的viewcontroller遵守UITextViewDelegate的协议
- (void)textViewDidChange:(UITextView
*)textView{
//想要在内容改变的时候,让UITextView进行重置,但drawRect:方法不能手动显示调用,必须通过调用setNeedsDisplay
或者 setNeedsDisplayInRect ,让系统自动调该方法。
[textView
setNeedsDisplay];
}
@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: