您的位置:首页 > 产品设计 > UI/UE

笔记: UI - 画图

2016-06-06 12:13 567 查看
(1). CG画图
/**   CG画图法   **/
- (void)drawRect:(CGRect)rect{
    //准备画笔
    CGContextRef  pen =
UIGraphicsGetCurrentContext();
    //落笔(落笔点)   
参数:笔,x坐标,y坐标
    CGContextMoveToPoint(pen,
40, 40);
    
    //画横线 
(给定右坐标,画笔自动连线)
    CGContextAddLineToPoint(pen,
80, 40);
    //画左下划
    CGContextAddLineToPoint(pen,
60, 70);
    //左上提
(三角形)回到原点
    CGContextAddLineToPoint(pen,
40, 40);
    
    //设置描边颜色 stroke
    CGContextSetStrokeColorWithColor(pen, [UIColor
blueColor].CGColor);
    //开始描边
//    CGContextStrokePath(pen);
    //设置填充颜色 fill
    CGContextSetFillColorWithColor(pen, [UIColor
orangeColor].CGColor);
    //填充颜色
//    CGContextFillPath(pen);

    //此处注意:因为描边和填充不能同时上色,如果要同时使用,用下面方法
    CGContextDrawPath(pen,
kCGPathFillStroke);
}

(2)UIBeZierPath  (贝塞尔路径 封装类)
可以按照面向对象的方式绘制图形,如:圆形,扇形,椭圆,矩形,多边形等等。

1.  自定义图形
     /** UIBezierPath
贝塞尔路径封装类  自定义图形  */
    //画笔
    UIBezierPath *path = [UIBezierPath
bezierPath];
    //移动画笔到起点
    [path moveToPoint:CGPointMake(120,
120)];
    
    //画线
    [path addLineToPoint:CGPointMake(200,
120)];
    [path addLineToPoint:CGPointMake(160,
180)];
    [path addLineToPoint:CGPointMake(120,
120)];
    
    //设置边线宽度
    path.lineWidth =
3;
    //设置边线连接处样式 (kCGLineJoinBevel
尖角)
    path.lineJoinStyle =
kCGLineJoinRound;
    //设置线头样式(起点和终点连接处)
    path.lineCapStyle =
kCGLineCapButt;
    
    //设置描边颜色
    [[UIColor
blueColor] setStroke];
    //开始描边
    [path stroke];
    //设置填充颜色
    [[UIColor
orangeColor] setFill];
    //开始填充
    [path fill];

  2.  /** UIBezierPath
贝塞尔路径封装类  系统图形  */

    /* 圆形
或  扇形          π = 180度
     参数:center:圆心    radiu:半径   startAngle:起始弧度
M_PI_2  即 π/2
     endAngle:终止弧度    clockwise:是否顺时针     */
    UIBezierPath *circlepath = [UIBezierPath
bezierPathWithArcCenter:
CGPointMake(160,
200)  radius:80
startAngle:0 
endAngle:M_PI *
2   clockwise:YES];

    [customRoundPath closePath];
//停止画图

/* 矩形 */
    UIBezierPath * rectpath = [UIBezierPath
bezierPathWithRect:CGRectMake(150,
40, 100,
50)];
[customRoundPath closePath];
//停止画图
    

    /* 椭圆 */
    UIBezierPath *ovalpath = [UIBezierPath
bezierPathWithOvalInRect:CGRectMake(160,
45, 80,
40)];
    [customRoundPath closePath];
//停止画图
    

    /* 圆角矩形 */
    UIBezierPath *roundRectPath = [UIBezierPath
bezierPathWithRoundedRect:CGRectMake(100,
300, 100,
70) cornerRadius:10];
   [customRoundPath closePath];
//停止画图

 /*  定制圆角矩形 */
    /* byRoundingCorners:修改那个角   cornerRadii:圆角弧度 */
    UIBezierPath *customRoundPath = [UIBezierPath
bezierPathWithRoundedRect:CGRectMake(10,
300, 80,
50) byRoundingCorners:UIRectCornerBottomLeft|UIRectCornerTopRight 
cornerRadii:CGSizeMake(20,
8)];
[customRoundPath closePath];
//停止画图

  /* 贝塞尔
曲线  - 牵引拉曲
*/
   /* 先画线,再设置牵引力  */
    UIBezierPath *curvePath = [UIBezierPath
bezierPath];  //画笔
    [curvePath moveToPoint:CGPointMake(10,
20)];  //落笔点
//贝塞尔曲线
参数1:线的重点   point1:牵引中心1  
    [curvePath addCurveToPoint:CGPointMake(80,
200) controlPoint1:CGPointMake(70,
40) controlPoint2:CGPointMake(0,
160)];
[customRoundPath closePath];
//停止画图

    //设置描边颜色
    [[UIColor
blueColor] setStroke];
    //开始描边
    [path stroke];
    //设置填充颜色
    [[UIColor
orangeColor] setFill];
    //开始填充
    [path fill];

(3)自由画线
1. 在MyView.h 文件中声明 画笔属性
@property(nonatomic)
UIBezierPath *path;
2. 首先首先懒加载
画笔path
-(UIBezierPath *)path{
    if (_path ==
nil) {
        //
获取画笔
         _path = [UIBezierPath
bezierPath];
    }
    return
_path;
}
3.重写drawRect
方法,设置 画笔颜色,线宽(注意这一步很重要)
- (void)drawRect:(CGRect)rect{
//设置描边颜色
    [[UIColor
blueColor] setStroke];
    //开始描边
    [self.path
stroke];
    //设置边线宽度
    self.path.lineWidth =
3;
}
4. 监听手指触屏事件,获取起点
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event{
    //获取手指 Touch
    UITouch *touch = touches.anyObject;
    //获取手指位置
    CGPoint p = [touch
locationInView:self];
    //把画笔
移动到这个位置
    [self.path
moveToPoint:p];
}
5. 监听手指移动事件,开始连线
- (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event{
    //获取手指 Touch
    UITouch *touch = touches.anyObject;
    //获取手指位置
    CGPoint p = [touch
locationInView:self];
    //连线
    [self.path
addLineToPoint:p];
    //刷新页面,调用setNeedsDisplay方法(该方法自动调用drawRect方法)
    [self
setNeedsDisplay];
}

(4)绘制文字  

(5) 绘制图片  TRImageView
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: