1.画线
1>添加一根线直接addLineToPoint
//拼接路径
UIBezierPath *path=[ UIBezierPath bezierPath ];
[path moveToPoint : CGPointMake ( 50 , 50 )];
[path addLineToPoint : CGPointMake ( 100 , 100 )];
2>因为路径是拼接的,默认下一条线的起点是上一条线的终点。
[path addLineToPoint : CGPointMake ( 100 , 300 )];
3>设置线条状态
//颜色
[[ UIColor redColor ] setStroke ];
//也可以用:[[UIColor redColor] set];
//宽度
[path setLineWidth : 20 ];
//设置线条顶角样式
//kCGLineCapRound 圆角
[path setLineCapStyle : kCGLineCapRound ];
//画第二根线:默认第二根线的起点就是上一根线的终点
[path addLineToPoint : CGPointMake ( 100 , 300 )];
//设置线条的交接样式
//kCGLineJoinBevel 正切
[path setLineJoinStyle : kCGLineJoinBevel ];
2.画三角形
1>怎样关闭路径:从路径的终点连接到起点
[path closePath ];
2>设置图形状态
//设置填充的颜色
[[ UIColor redColor ] setFill ];
//设置描边的颜色
[[ UIColor blueColor ] setStroke ];
3>不同的渲染方式
//渲染上下文
//CGContextStrokePath(ctx);
//填充上下文 前提是路径必须封闭
//CGContextFillPath(ctx);
//既描边又填充
CGContextDrawPath (ctx, kCGPathEOFillStroke );
3.画矩形
在渲染时候只能填充或描边不能既描边又填充:[path fill ];
4.画圆弧
- ( void )yuanhu
{
/*
Center:圆心
radius:半径
startAngle:起始角度
clockwise: 表示顺时针还是逆时针1.顺时针 0.逆时针
*/
UIBezierPath *path=[ UIBezierPath bezierPathWithArcCenter : CGPointMake ( 100 , 100 ) radius : 50 startAngle : 0 endAngle :- M_PI_2 clockwise : 0 ];
[path stroke ];
}
5.画扇形
- ( void )shanxing
{
UIBezierPath *path=[ UIBezierPath bezierPathWithArcCenter : CGPointMake ( 100 , 100 ) radius : 50 startAngle : 0 endAngle :- M_PI_2 clockwise : 0 ];
//添加一根线到圆心
[path addLineToPoint : CGPointMake ( 100 , 100 )];
//如果没有封闭路径,系统会自动封闭,关闭路径在填充,从路径的终点连接到起点
[path fill ];
}
6.重绘(下载提示条)
1>%在stringWithFormat这个方法中有特殊含义,用两个百分号 %%=%
NSString *text=[ NSString stringWithFormat : @"%.2f%%” 0.3333* 100 ];
2>不能使用drawRect重绘
//drawRect方法不能手动调用,因为这个方法不会帮我们生成上下文
//[self drawRect:self.bounds];
//只有在这里才能获取上下文,这个上下文是系统系统自动创建
//默认只会调用一次,在控件第一次使用的时候会调用
-( void )drawRect:( CGRect )rect
{
}
3>使用setNeedsDisplay重绘
// setNeedsDisplay 方法底层 :底层并不是马上去调用drawRect,重绘
//只是一个标志,给控件重绘的一个标志,等下一次屏幕刷新才会调用drawRect,重绘,然后会生成跟View相关联的上下文
[ self setNeedsDisplay ];
4>获取UISlider(进度条)的值属性是Value
7.画饼图
1>随机生成颜色
-( UIColor *) randowColor
{
CGFloat r= arc4random_uniform ( 256 ) / 255.0 ;
CGFloat g= arc4random_uniform ( 256 ) / 255.0 ;
CGFloat b= arc4random_uniform ( 256 ) / 255.0 ;
return [ UIColor colorWithRed :r green :g blue :b alpha : 1 ];
}
8.使用UIView绘制图片文字矩形
//1>UIView绘制矩形
-( void ) juxing
{
//绘制矩形
UIRectFill ( CGRectMake ( 0 , 0 , 200 , 200 ));
}
//2>绘制文字
- ( void ) drawText
{
NSString *text= @"在听陈奕迅:遥远的她,内疚” ;
//Attributes:
//字典类型:用给给文本框添加一个属性,颜色,字体等
//注意:没办法绘制阴影
NSMutableDictionary *textDic=[ NSMutableDictionary dictionary ];
//文字颜色
textDic[ NSForegroundColorAttributeName ]=[ UIColor redColor ];
//字体大小
textDic[ NSFontAttributeName ]=[ UIFont boldSystemFontOfSize : 30 ];
//空心效果
textDic[ NSStrokeWidthAttributeName ]= @1 ;
//绘制文字
//不会自动换行
//[text drawAtPoint:CGPointZero withAttributes:textDic];
//会自动换行
[text drawInRect : self . bounds withAttributes :textDic];
}
//3>绘制图片
-( void ) drawImage
{
// 裁剪 :超出设定范围的东西都会被裁剪
//前提条件:必须要先裁剪,然后绘制内容,因为裁剪会影响到后面的内容
UIRectClip ( CGRectMake ( 0 , 0 , 100 , 100 ));
//加载图片
UIImage *image=[ UIImage imageNamed : @"001" ];
//绘制图片
//1>只是设置绘图的位置,默认绘制的内容跟图片的大小一致
//[image drawAtPoint:CGPointZero];
//2>设置绘图内容的尺寸
//[image drawInRect:CGRectMake(0, 0, 100, 100)];
//3>平铺(根据当前View的rectrrrr)
[image drawAsPatternInRect : self . bounds ];
}
9.使用UIView绘制文字不能设置阴影,换思路给控件lable设置阴影
- ( void )viewDidLoad {
[ super viewDidLoad ];
//给控件lable设置阴影
NSMutableDictionary *dic=[ NSMutableDictionary dictionary ];
NSShadow *shadw=[[ NSShadow alloc ] init ];
//阴影距文字的偏移范围
shadw. shadowOffset = CGSizeMake ( 15 , 15 );
//阴影颜色
shadw. shadowColor =[ UIColor blueColor ];
//设置阴影模糊成都
shadw. shadowBlurRadius = 2 ;
dic[ NSShadowAttributeName ]=shadw;
NSMutableAttributedString *str=[[ NSMutableAttributedString alloc ] initWithString : @"阿猫阿狗" attributes :dic];
_lable . attributedText =str;
}
10.模仿系统的UIImageVIew
1>必须要知道系统的UIImageVIew有什么功能
a.通过initWithImage方法自动计算frame直接使用,但加载出来的图片和图片本身尺寸一样
b.自己计算frame,显示
2>自定义UIView,给一个Image属性,添加一个类方法
11.定时器
1>NSTimer
特点: 当时间小于1秒的时候,一般不使用NSTimer,因为NSTimer的优先级比较低( 不能及时运行,不常用 )
[ NSTimer scheduledTimerWithTimeInterval : 0.25 target : self selector : @selector (timeChange) userInfo : nil repeats : YES ];
2>CADisplayLink
特点:
优先级较高,比较常用: 每次刷新屏幕都会调用,每秒调用60次
CADisplayLink *link=[ CADisplayLink displayLinkWithTarget : self selector : @selector (timeChange)];
//将link加载到主运行循环
[link addToRunLoop :[ NSRunLoop mainRunLoop ] forMode : NSDefaultRunLoopMode ];
12.矩阵变化
-( void )drawRect:( CGRect )rect
{
//1.获取上下文
CGContextRef ctx= UIGraphicsGetCurrentContext ();
//2.拼接路径(椭圆)
UIBezierPath *path=[ UIBezierPath bezierPathWithOvalInRect : CGRectMake (- 50 , - 100 , 100 , 200 )];
//===================================================
//上下文矩阵变换:必须在添加路径之前进行矩阵变换
//平移
CGContextTranslateCTM (ctx, 100 , 100 );
//缩放
CGContextScaleCTM (ctx, 0.5 , 0.5 );
//旋转
CGContextRotateCTM (ctx, M_PI_4 );
//===================================================
//3.添加路径到上下文
CGContextAddPath (ctx, path. CGPath );
//背景颜色
[[ UIColor redColor ] set ];
//4.渲染上下文
CGContextFillPath (ctx);
}
1>添加一根线直接addLineToPoint
//拼接路径
UIBezierPath *path=[ UIBezierPath bezierPath ];
[path moveToPoint : CGPointMake ( 50 , 50 )];
[path addLineToPoint : CGPointMake ( 100 , 100 )];
2>因为路径是拼接的,默认下一条线的起点是上一条线的终点。
[path addLineToPoint : CGPointMake ( 100 , 300 )];
3>设置线条状态
//颜色
[[ UIColor redColor ] setStroke ];
//也可以用:[[UIColor redColor] set];
//宽度
[path setLineWidth : 20 ];
//设置线条顶角样式
//kCGLineCapRound 圆角
[path setLineCapStyle : kCGLineCapRound ];
//画第二根线:默认第二根线的起点就是上一根线的终点
[path addLineToPoint : CGPointMake ( 100 , 300 )];
//设置线条的交接样式
//kCGLineJoinBevel 正切
[path setLineJoinStyle : kCGLineJoinBevel ];
2.画三角形
1>怎样关闭路径:从路径的终点连接到起点
[path closePath ];
2>设置图形状态
//设置填充的颜色
[[ UIColor redColor ] setFill ];
//设置描边的颜色
[[ UIColor blueColor ] setStroke ];
3>不同的渲染方式
//渲染上下文
//CGContextStrokePath(ctx);
//填充上下文 前提是路径必须封闭
//CGContextFillPath(ctx);
//既描边又填充
CGContextDrawPath (ctx, kCGPathEOFillStroke );
3.画矩形
在渲染时候只能填充或描边不能既描边又填充:[path fill ];
4.画圆弧
- ( void )yuanhu
{
/*
Center:圆心
radius:半径
startAngle:起始角度
clockwise: 表示顺时针还是逆时针1.顺时针 0.逆时针
*/
UIBezierPath *path=[ UIBezierPath bezierPathWithArcCenter : CGPointMake ( 100 , 100 ) radius : 50 startAngle : 0 endAngle :- M_PI_2 clockwise : 0 ];
[path stroke ];
}
5.画扇形
- ( void )shanxing
{
UIBezierPath *path=[ UIBezierPath bezierPathWithArcCenter : CGPointMake ( 100 , 100 ) radius : 50 startAngle : 0 endAngle :- M_PI_2 clockwise : 0 ];
//添加一根线到圆心
[path addLineToPoint : CGPointMake ( 100 , 100 )];
//如果没有封闭路径,系统会自动封闭,关闭路径在填充,从路径的终点连接到起点
[path fill ];
}
6.重绘(下载提示条)
1>%在stringWithFormat这个方法中有特殊含义,用两个百分号 %%=%
NSString *text=[ NSString stringWithFormat : @"%.2f%%” 0.3333* 100 ];
2>不能使用drawRect重绘
//drawRect方法不能手动调用,因为这个方法不会帮我们生成上下文
//[self drawRect:self.bounds];
//只有在这里才能获取上下文,这个上下文是系统系统自动创建
//默认只会调用一次,在控件第一次使用的时候会调用
-( void )drawRect:( CGRect )rect
{
}
3>使用setNeedsDisplay重绘
// setNeedsDisplay 方法底层 :底层并不是马上去调用drawRect,重绘
//只是一个标志,给控件重绘的一个标志,等下一次屏幕刷新才会调用drawRect,重绘,然后会生成跟View相关联的上下文
[ self setNeedsDisplay ];
4>获取UISlider(进度条)的值属性是Value
7.画饼图
1>随机生成颜色
-( UIColor *) randowColor
{
CGFloat r= arc4random_uniform ( 256 ) / 255.0 ;
CGFloat g= arc4random_uniform ( 256 ) / 255.0 ;
CGFloat b= arc4random_uniform ( 256 ) / 255.0 ;
return [ UIColor colorWithRed :r green :g blue :b alpha : 1 ];
}
8.使用UIView绘制图片文字矩形
//1>UIView绘制矩形
-( void ) juxing
{
//绘制矩形
UIRectFill ( CGRectMake ( 0 , 0 , 200 , 200 ));
}
//2>绘制文字
- ( void ) drawText
{
NSString *text= @"在听陈奕迅:遥远的她,内疚” ;
//Attributes:
//字典类型:用给给文本框添加一个属性,颜色,字体等
//注意:没办法绘制阴影
NSMutableDictionary *textDic=[ NSMutableDictionary dictionary ];
//文字颜色
textDic[ NSForegroundColorAttributeName ]=[ UIColor redColor ];
//字体大小
textDic[ NSFontAttributeName ]=[ UIFont boldSystemFontOfSize : 30 ];
//空心效果
textDic[ NSStrokeWidthAttributeName ]= @1 ;
//绘制文字
//不会自动换行
//[text drawAtPoint:CGPointZero withAttributes:textDic];
//会自动换行
[text drawInRect : self . bounds withAttributes :textDic];
}
//3>绘制图片
-( void ) drawImage
{
// 裁剪 :超出设定范围的东西都会被裁剪
//前提条件:必须要先裁剪,然后绘制内容,因为裁剪会影响到后面的内容
UIRectClip ( CGRectMake ( 0 , 0 , 100 , 100 ));
//加载图片
UIImage *image=[ UIImage imageNamed : @"001" ];
//绘制图片
//1>只是设置绘图的位置,默认绘制的内容跟图片的大小一致
//[image drawAtPoint:CGPointZero];
//2>设置绘图内容的尺寸
//[image drawInRect:CGRectMake(0, 0, 100, 100)];
//3>平铺(根据当前View的rectrrrr)
[image drawAsPatternInRect : self . bounds ];
}
9.使用UIView绘制文字不能设置阴影,换思路给控件lable设置阴影
- ( void )viewDidLoad {
[ super viewDidLoad ];
//给控件lable设置阴影
NSMutableDictionary *dic=[ NSMutableDictionary dictionary ];
NSShadow *shadw=[[ NSShadow alloc ] init ];
//阴影距文字的偏移范围
shadw. shadowOffset = CGSizeMake ( 15 , 15 );
//阴影颜色
shadw. shadowColor =[ UIColor blueColor ];
//设置阴影模糊成都
shadw. shadowBlurRadius = 2 ;
dic[ NSShadowAttributeName ]=shadw;
NSMutableAttributedString *str=[[ NSMutableAttributedString alloc ] initWithString : @"阿猫阿狗" attributes :dic];
_lable . attributedText =str;
}
10.模仿系统的UIImageVIew
1>必须要知道系统的UIImageVIew有什么功能
a.通过initWithImage方法自动计算frame直接使用,但加载出来的图片和图片本身尺寸一样
b.自己计算frame,显示
2>自定义UIView,给一个Image属性,添加一个类方法
11.定时器
1>NSTimer
特点: 当时间小于1秒的时候,一般不使用NSTimer,因为NSTimer的优先级比较低( 不能及时运行,不常用 )
[ NSTimer scheduledTimerWithTimeInterval : 0.25 target : self selector : @selector (timeChange) userInfo : nil repeats : YES ];
2>CADisplayLink
特点:
优先级较高,比较常用: 每次刷新屏幕都会调用,每秒调用60次
CADisplayLink *link=[ CADisplayLink displayLinkWithTarget : self selector : @selector (timeChange)];
//将link加载到主运行循环
[link addToRunLoop :[ NSRunLoop mainRunLoop ] forMode : NSDefaultRunLoopMode ];
12.矩阵变化
-( void )drawRect:( CGRect )rect
{
//1.获取上下文
CGContextRef ctx= UIGraphicsGetCurrentContext ();
//2.拼接路径(椭圆)
UIBezierPath *path=[ UIBezierPath bezierPathWithOvalInRect : CGRectMake (- 50 , - 100 , 100 , 200 )];
//===================================================
//上下文矩阵变换:必须在添加路径之前进行矩阵变换
//平移
CGContextTranslateCTM (ctx, 100 , 100 );
//缩放
CGContextScaleCTM (ctx, 0.5 , 0.5 );
//旋转
CGContextRotateCTM (ctx, M_PI_4 );
//===================================================
//3.添加路径到上下文
CGContextAddPath (ctx, path. CGPath );
//背景颜色
[[ UIColor redColor ] set ];
//4.渲染上下文
CGContextFillPath (ctx);
}