Quartz 2D绘图基本用法

本文详细介绍了使用CoreGraphics进行各种图形绘制的方法,包括线条、矩形、圆形、贝塞尔曲线和图像文字的绘制过程及参数设置技巧。
 1.获取上下文
 2.设置路径(画的形状)
 3.将路径添加到上下文
 4.设置上下文属性(画笔的粗细、颜色、阴影等)
 5.绘制路径
 6.释放路径(某些情况)
  //1.取得上下文(画布)
    CGContextRef context = UIGraphicsGetCurrentContext();

    //绘制线条
//    [self drawLine:context];
//    [self drawLine2:context];

    //绘制矩形
//    [self drawShapeRect:context];

    //绘制圆
//    [self drawArc:context];

    //绘制贝塞尔曲线
//    [self drawCure:context];

    //绘制文字
//    [self drawText:context];

    // 绘制图像
    [self drawImg:context];
}
#pragma mark - 绘制图像
- (void)drawImg:(CGContextRef)context {

    UIImage *img = [UIImage imageNamed:@"2012100413195471481.jpg"];
    //UIKit中提供的绘图方式
    //  1> 指定绘制图像的点,无法设置图片的大小
//    [img drawAtPoint:CGPointMake(50, 50)];
    // 2> 在指定的区域绘制,图片会被拉伸
//    [img drawInRect:CGRectMake(0, 0, 320, 200)];
    // 3> 在指定区域绘制图片,平铺
//    [img drawAsPatternInRect:CGRectMake(0, 0, 320, 200)];

    //Core Graphic中的绘图方式

    //保存context
    CGContextSaveGState(context);

    //转换坐标
    //顺时针旋转180
//    CGContextRotateCTM(context, M_PI);
    //缩放
    CGContextScaleCTM(context, 1, -1);
    //平移
    CGContextTranslateCTM(context, 0, -200);

    CGContextDrawImage(context, CGRectMake(0, 0, 320, 200), img.CGImage);

    //回复上下文
    CGContextRestoreGState(context);

}

#pragma mark - 绘制文字
- (void)drawText:(CGContextRef) context {

    //如果相对文字设置有特殊的要求,可以用:Core Text  底层:C

//    NSString *string = @"无限互联3G学院";
    NSString *string = @"hello world hello world hello world hello world hello world";

    CGRect rect = CGRectMake(50, 50, 200, 200);

    //设置颜色
    [[UIColor redColor] setFill];

    //绘制矩形
    UIRectFill(rect);

    //设置字体的颜色
    [[UIColor greenColor] setFill];

    UIFont *font = [UIFont systemFontOfSize:20];

    //绘制文字
    [string drawInRect:rect withFont:font lineBreakMode:NSLineBreakByWordWrapping alignment:NSTextAlignmentCenter];

}

#pragma mark - 绘制贝塞尔曲线
- (void)drawCure:(CGContextRef) context{

    //1.设置起始点
    CGContextMoveToPoint(context, 20, 200);

    /*
     context:  绘制的上下文
     cp1x,cp1y:  第一条切线的终点
     cp2x,cp2y;  第二条切线的起点
     x,y   第二条切线的终点
     */
//    CGContextAddCurveToPoint(context, 100, 20,
//                                      200, 300,
//                                      300, 50);

    CGContextAddQuadCurveToPoint(context, 140, 20, 300, 200);

    //绘制
    CGContextDrawPath(context, kCGPathStroke);


}

#pragma mark - 绘制圆弧
- (void)drawArc:(CGContextRef)context {

    //1.绘制圆弧
    /*
     context:  上下文
     x,y:       圆心坐标
     radius:    半径
     startAngle:  起始角度
     endAngle:  结束的角度
     clockwise:  顺时针: 0   逆时针  1
    CGContextAddArc(context, 160, 100, 100 , 0, M_PI/4, 1);

    //设置颜色
    [[UIColor redColor] setFill];

    //绘制
    CGContextDrawPath(context, kCGPathStroke);
    */

    //2.利用矩形绘制圆
    CGRect rect = CGRectMake(50, 50, 200, 200);

    //设置颜色
    [[UIColor redColor] setStroke];
    [[UIColor greenColor] setFill];

    //绘制矩形
    UIRectFrame(rect);

    //绘制矩形的内切圆
    CGContextAddEllipseInRect(context, rect);
    //绘制
    CGContextDrawPath(context, kCGPathFillStroke);

}

#pragma mark - 绘制矩形
- (void)drawShapeRect:(CGContextRef)context {

/*---------------------1.Graphic提供的方法------------------------------*/

//    //1.获取上下文
//   
//    //2.绘制矩形
//    CGRect rect = CGRectMake(40, 40, 100, 200);
//    CGContextAddRect(context, rect);
//   
//    //3.设置线条的宽度和颜色
//    CGContextSetLineWidth(context, 5);
//    [[UIColor redColor] setStroke];
//    [[UIColor blueColor] setFill];
//   
//    //4.绘制
//    CGContextDrawPath(context, kCGPathFillStroke);

/*---------------------UIKit提供的方法------------------------------*/


    //设置颜色,注意:得在绘图之前设置
    [[UIColor redColor] setStroke];
    [[UIColor greenColor] setFill];

    CGRect rect = CGRectMake(40, 40, 100, 200);
    //实心的矩形
    UIRectFill(rect);
    //空心的矩形
    UIRectFrame(rect);

}

#pragma mark - 绘制线条2
- (void)drawLine2:(CGContextRef)context {

    //1.取得上下文

    //2.添加多条线
    CGPoint p0 = {50,50};
    CGPoint p1 = {200,200};
    CGPoint p2 = {50,200};
    CGPoint p3 = {50,50};
    CGPoint points[] = {p0,p1,p2,p3};
//    int a[3];
    CGContextAddLines(context, points, 4);

    //UIKit中设置颜色的方法
    //3.设置线条的颜色
    //设置线条的颜色
    [[UIColor redColor] setStroke];
    //设置填充的颜色
    [[UIColor greenColor] setFill];

    //设置线条和填充的颜色一样
//    [[UIColor redColor] set];

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

#pragma mark - 绘制线条1
- (void)drawLine:(CGContextRef)context {

    /*1.获取上下文(取得画布)*/
//    CGContextRef context = UIGraphicsGetCurrentContext();

    /*2.创建一个需要绘制的路径*/

    //    CGPathRef  ,不可变的
    //可变的,可以动态添加
    CGMutablePathRef path = CGPathCreateMutable();

    //划线
    //(1)设置起始点
    CGPathMoveToPoint(path, NULL, 50, 50);
    //(2)设置目标点
    CGPathAddLineToPoint(path, NULL, 200, 200);
    CGPathAddLineToPoint(path, NULL, 50, 200);

    //封闭路径
    CGPathCloseSubpath(path);

    /*3.将路径添加到上下文*/
    CGContextAddPath(context, path);

    /*4.设置上下文的属性*/

    //(1)设置线条的颜色
    /*
     设置线条的颜色
     red (0-1)    red/255.0
     green  (0-1)  green/255.0
     blue  (0-1)  blue/255.0
     */
    CGContextSetRGBStrokeColor(context, 35/255.0, 116/255.0, 0, 1.0);

    //(2)设置填充颜色
    CGContextSetRGBFillColor(context, 0, 0, 1, 1.0);

    //(3)设置线条的宽度
    CGContextSetLineWidth(context, 3);
    //设置两条线之间连接点的样式
    CGContextSetLineJoin(context, kCGLineJoinRound);
    //(4)设置圆角
    CGContextSetLineCap(context, kCGLineCapRound);
    //(5)设置虚线
    /*
     CGContextRef c           上下文
     CGFloat phase            相位,一般设置为0.f
     const CGFloat *lengths   C 数组
     size_t count             数组个数
     */
    CGFloat lengths[2] = {30,10};
    CGContextSetLineDash(context, 0.f, lengths, 2);

    /*5.绘制路径*/
    /*
     绘制模式
     kCGPathFill,  只填充,不会绘制边缘
     kCGPathStroke, 只绘制边缘,空心
     kCGPathFillStroke, 即画边缘,也填充
     */
    CGContextDrawPath(context, kCGPathFillStroke);

    /*6.释放路径*/
    CGPathRelease(path);

}

@end
在充满仪式感的生活里,一款能传递心意的小工具总能带来意外惊喜。这款基于Java开发的满屏飘字弹幕工具,正是为热爱生活、乐于分享的你而来——它以简洁优雅的视觉效果,将治愈系文字化作灵动弹幕,在屏幕上缓缓流淌,既可以作为送给心仪之人的浪漫彩蛋,也能成为日常自娱自乐、舒缓心情的小确幸。 作为程序员献给crush的心意之作,工具的设计藏满了细节巧思。开发者基于Swing框架构建图形界面,实现了无边框全屏显示效果,搭配毛玻璃质感的弹幕窗口与圆润边角设计,让文字呈现既柔和又不突兀。弹幕内容精选了30条治愈系文案,从“秋天的风很温柔”到“你值得所有温柔”,涵盖生活感悟、自我关怀、浪漫告白等多个维度,每一条都能传递温暖力量;同时支持自定义修改文案库,你可以替换成专属情话、纪念文字或趣味梗,让弹幕更具个性化。 在视觉体验上,工具采用柔和色调生成算法,每一条弹幕都拥有独特的清新配色,搭配半透明渐变效果与平滑的移动动画,既不会遮挡屏幕内容,又能营造出灵动治愈的氛围。开发者还优化了弹幕的生成逻辑,支持自定义窗口大小、移动速度、生成间隔等参数,最多可同时显示60条弹幕,且不会造成电脑卡顿;按下任意按键即可快速关闭程序,操作便捷无负担。 对于Java学习者而言,这款工具更是一份优质的实战参考。源码完整展示了Swing图形界面开发、定时器调度、动画绘制、颜色算法等核心技术,注释清晰、结构简洁,哪怕是初学者也能轻松理解。开发者在AI辅助的基础上,反复调试优化细节,解决了透明度控制、弹幕碰撞、资源占用等多个问题,这份“踩坑实录”也为同类项目开发提供了宝贵经验。 无论是想给喜欢的人制造浪漫惊喜,用满屏文字传递心意;还是想在工作间隙用治愈文案舒缓压力,或是作为Java学习的实战案例参考,这款满屏飘字弹幕工具都能满足你的需求。它没有复杂的操作流程,无需额外配置环境,下载即可运行,用最纯粹的设计传递最真挚的
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值