Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >IOS开发 图形绘制,绘制线条,矩形,和垂直和居中绘制文字

IOS开发 图形绘制,绘制线条,矩形,和垂直和居中绘制文字

作者头像
张云飞Vir
发布于 2020-03-16 08:07:07
发布于 2020-03-16 08:07:07
1.8K00
代码可运行
举报
文章被收录于专栏:写代码和思考写代码和思考
运行总次数:0
代码可运行

概述

吐槽下IOS下 的图形绘图,代码冗长,不得不自己重新封装方法。整理形成本文。

绘制线

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 绘制直线
+ (void)toDrawLineFromX:(CGFloat)x1 Y:(CGFloat)y1 toX:(CGFloat)x2 toY:(CGFloat)y2 context:(CGContextRef)con{
    CGContextMoveToPoint(con, x1, y1);
    CGContextAddLineToPoint(con, x2, y2);
    CGContextSetLineWidth(con, 1);
    CGContextStrokePath(con);
}

绘制矩形

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//绘制矩形 ,fillColor填充色
+ (void)toDrawRect:(CGRect)rectangle color:fillColor context:(CGContextRef)ctx{
    
    //创建路径并获取句柄
    CGMutablePathRef
    path = CGPathCreateMutable();
    //将矩形添加到路径中
    CGPathAddRect(path,NULL,
                  rectangle);
    //获取上下文
    //将路径添加到上下文
    
    CGContextAddPath(ctx,
                     path);
    
    //设置矩形填充色
    [fillColor setFill];
    //矩形边框颜色
    [[UIColor
      whiteColor] setStroke];
    //边框宽度
    CGContextSetLineWidth(ctx,0);
    //绘制
    CGContextDrawPath(ctx,
                      kCGPathFillStroke);
    CGPathRelease(path);
}

垂直和居中绘制文字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
///绘制文字,rect1指定矩形,绘制文字在这个矩形水平和垂直居中
+ (void)toDrawTextWithRect:(CGRect)rect1 str:(NSString*)str1 context:(CGContextRef)context{
    if( str1 == nil || context == nil)
        return;
    
    CGContextSetLineWidth(context, 1.0);
    CGContextSetRGBFillColor (context, 0.01, 0.01, 0.01, 1);
    
    //段落格式
    NSMutableParagraphStyle *textStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
    textStyle.lineBreakMode = NSLineBreakByWordWrapping;
    textStyle.alignment = NSTextAlignmentCenter;//水平居中
    //字体
    UIFont  *font = [UIFont boldSystemFontOfSize:22.0];
    //构建属性集合
    NSDictionary *attributes = @{NSFontAttributeName:font, NSParagraphStyleAttributeName:textStyle};
    //获得size
    CGSize strSize = [str1 sizeWithAttributes:attributes];
    CGFloat marginTop = (rect1.size.height - strSize.height)/2;
    //垂直居中要自己计算
    CGRect r = CGRectMake(rect1.origin.x, rect1.origin.y + marginTop,rect1.size.width, strSize.height);
    [str1 drawInRect:r withAttributes:attributes];
}

如何使用

假设把上面的方法放入到一个类 DrawUtil 中,我们可以通过 DrawUtil 来调用方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  定义: #define drawLine(x1,y1,x2,y2,con) [DrawUtil toDrawLineFromX:x1 Y:y1 toX:x2 toY:y2 context:con]

   //获得上下文
  CGContextRef con = UIGraphicsGetCurrentContext();
     CGContextClearRect(con, rect);

  //画线,
  drawLine(x,y,x+rectWidth,y,con);

  //矩形
    [DrawUtil toDrawRect:CGRectMake(x*unitWidth+1, y*unitHeight+1,unitWidth-1, unitHeight-1) color:[UIColor whiteColor] context:con];

    //文字
  [DrawUtil toDrawTextWithRect:rect1 str:@"你" context:context];
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
绘图-圆环进度条实现详解
前言 实现了一款时下比较流行的环状进度动图,以下是源码解析 使用 Core Graphics 和 定时器 实现环形进度动图 圆环进度.gif 核心源码 # 使用 [self setNeedsDisp
進无尽
2018/09/12
2.2K0
绘图-圆环进度条实现详解
iOS开发CoreGraphics核心图形框架之一——CGPath的应用
    CoreGraphics核心图形框架相较于UIKit框架更加偏于底层。在Objective-C工程中,CoreGraphics其中方法都是采用C语言风格进行编写的,同时其并不支持Objective-C的自动引用计数,在使用这个框架进行编程时,开发者要手动对内存进行管理。在Swift工程中,Apple使用Swift语言对CoreGraphics矿建进行了重构,将CGPath,CGMutablePaht等都重新定义为了类。CGPath可以理解为图形的路径,在Objective-C工程中,其实系统定义的一个内部结构体,开发者不可以直接使用,开发者CGPathRef和CGMutablePathRef别名作为CGPath的引用,实际上,CGPathRef和CGMutablePathRef都是CGPath结构体类型的指针,不同的是一个是const类型不可修改的,一个是可以修改的,系统定义如下:
珲少
2018/08/15
1.8K0
iOS开发CoreGraphics核心图形框架之一——CGPath的应用
iOS开发——Core Graphics绘图
我们在搭建UI界面时,有很多时候,我们会用到iOS自带的绘图功能来完成一些界面的效果,很常用也很方便。今天我们在这里就一起讨论一下iOS的绘图功能。
Originalee
2018/08/30
2.6K0
iOS开发CoreGraphics核心图形框架之二——深入理解图形上下文
      在上一篇博客中,介绍了有关CGPath绘制路径的相关方法,其中在View视图的drawRect方法中,已经使用过上下文将Path路径绘制到当前视图上,上一篇博客只是抛砖引玉,本片博客将更深入的介绍下有关上下文的更多内容。关于接胡搜啊CGPath应用的博客地址如下:
珲少
2018/08/15
2.7K0
iOS开发CoreGraphics核心图形框架之二——深入理解图形上下文
iOS开发CoreGraphics核心图形框架之五——Patterns模型的应用
    Patterns称为模型可能并不直观,说一个场景我们或许就可以更加容易的理解Patterns。在开发中,开发者经常会遇到这样的需求,将某个图片或者某个图形进行平铺作为界面的背景,当然iOS中有现成的方法来将图片转换为背景色进行背景的渲染,但是这种方式并不太灵活,例如背景花纹的着色,背景图片的平铺间距设置等需求都无法满足。Patterns就是用来处理这样的需求。
珲少
2018/08/15
7860
iOS开发CoreGraphics核心图形框架之五——Patterns模型的应用
Objective-C 自定义UISlider滑杆 分段样式效果需求分析代码部分DEMO地址
查看UISlider控件发现这个类是继承自UIControl,那么就自定义一个UIControl来实现UISlider没有的效果。 公开的变量中都是一些通用的参数,无非就是颜色、图片之类的,我这里使用比较少,有兴趣的可以自行添加。
gwk_iOS
2018/08/23
1.6K0
Objective-C 自定义UISlider滑杆 分段样式效果需求分析代码部分DEMO地址
UI进阶13 Quartz2DQuartz2D
Quartz2D 什么是Quartz2D Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF 截图\裁剪图片 自定义UI控件 … … Quartz2D实例 Quartz 2D能做很多强大的事情,例如 裁剪图片 涂鸦\画板 手势解锁 报表:折线图\饼状图\柱状图 Quartz2D在iOS开发中的价值 为了便于搭建美观的UI界面,iOS提供了UIKit框架,里面
developerbfl
2018/06/05
7070
iOS本地动态验证码生成
@property (strong, nonatomic) NSArray *dataArray;//字符素材数组
conanma
2021/05/10
6540
iOS开发CoreGraphics核心图形框架之六——梯度渐变
   关于颜色梯度渐变视图的创建,CoreGraphics框架中提供了两个类型CGShadingRef与CGGradientRef。CoreGraphics框架在绘制梯度渐变时,有两种绘制方式,分别为轴向绘制与径向绘制。轴向绘制是指确定两个点,起点与终点连接的直线作为梯度渐变的轴,垂直于此轴的线共享相同的颜色,由起点向终点进行颜色渐变。径向渐变是指由两个圆连接成圆台,在同一圆周上的所有点共享相同的颜色,由起始圆向终点圆进行颜色渐变。
珲少
2018/08/15
1.2K0
iOS开发CoreGraphics核心图形框架之六——梯度渐变
绘图-几种基本统计图的实现分析
在开发中我们会遇到各种统计图,或者各种绘图,本文通过对基本三大统计图:折线图、柱状图、扇形图的实现来掌握基本统计图的绘制,在下一篇文中会带来复杂一些的绘图案例分析,循序渐进达、触类旁通达到绘制各式各样图表的能力。
進无尽
2018/09/12
1.5K0
绘图-几种基本统计图的实现分析
iOS Quartz2D相关方法
View内部有个layer(图层)属性,drawRect:方法中取得的是一个Layer Graphics Context,因此,绘制的东西其实是绘制到view的layer上去了
码客说
2019/10/22
6630
iOS开发——系统原生的二维码扫描
对于现在的App应用来说,扫描二维码这个功能是再正常不过的一个功能了,在早期开发这些功能的时候,大家或多或少的都接触过ZXing和ZBar这类的第三方库,但从iOS7以后,苹果就给我们提供了系统原生的API来支持我们扫描获取二维码,ZXing和ZBar在使用中或多或少有不尽如人意的地方,再之停止更新很久了,所以今天我们就来聊聊如何用系统原生的方法扫描获取二维码。
Originalee
2018/08/30
8520
iOS坐标系探究
APP 在渲染视图时,需要在坐标系中指定绘制区域。这个概念看似乎简单,事实并非如此。
落影
2018/11/01
2.9K0
iOS --- 简单的任务绘制复盘
iOS图形绘制以及文本绘制一直是lz避免触及的地方,不为别的就是感觉这个东西不够对象化,比较零散。但因这次项目中遇到了这么个表达进度而又不是找不到现实UI库的情况下只能硬着头皮上拉,现在复盘一下当时的心理路程:
大话swift
2020/03/16
6520
iOS --- 简单的任务绘制复盘
Quartz2D复习(一)--- 基础知识 / 绘制线段圆弧 / 图片水印 / 截图
1、Quartz 2D是一个二维绘图引擎,同时支持ios和Mac系统; Quart2D的API是纯C语言的,API来自于Core  Graphics框架:
tandaxia
2018/09/27
2.7K0
Quartz2D复习(一)---  基础知识 / 绘制线段圆弧 / 图片水印 / 截图
iOS开发小技巧:根据文本,字体,计算UILabel高度及宽度
关于boundingRectWithSize,系统API有几个类的相关方法。搜索官方文档,可见如下:
陈满iOS
2018/09/10
5.5K0
iOS开发小技巧:根据文本,字体,计算UILabel高度及宽度
使用Quartz2D进行绘图1. Quartz2D2. 绘制基本图形
来来来,好玩的东西终于来了。接下来的几篇,咱们都将要聊一聊iOS中绘制图像的事儿哈。之前有一篇说到cell分割线顶头的方法中,有童鞋留言说还可以自己绘制。咳咳,会了绘图这个就不是难事儿啦~ 还有很多App里面超炫的特效,其实也都是基于各种绘图、路径哒。来吧,骚年~让我们浪起来。 1. Quartz2D Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac OS X系统(跨平台,纯 C 语言的)。包含在 Core Graphics 框架中。 Quartz 2D能完成的工作 绘制图形 : 线条\三角形
stanbai
2018/06/28
6350
文字排版入门—— 排版基础、CoreText和图文混排
字符是文字的最小单元,以这段文字为例,每个字都是一个字符;需要注意,字符是一个抽象的概念; 当文字真正绘制出来时需要选择字体,以“A”这个字母为例,当字母'A'印刷出来或者显示到屏幕,可能有多种字体,每种字体都有一种字形'A':
落影
2020/02/25
7.6K0
文字排版入门—— 排版基础、CoreText和图文混排
ios 图像处理
CGContextRef context = UIGraphicsGetCurrentContext();
conanma
2021/05/12
1.7K1
图形编辑器开发:基于相交策略选中图形
我开发的图形编辑器,原本选中图形是基于选区是否完全包含对应图形来判断其是否被选中,使用的是矩形包含判断。
前端西瓜哥
2023/08/18
1930
图形编辑器开发:基于相交策略选中图形
推荐阅读
相关推荐
绘图-圆环进度条实现详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验