drawRect:绘图

作用:专门用来绘图 什么时候调用:当View显示的时候调用(ViewWillAppear和ViewDidAppear之间) 参数rect:当View的bounds 在drawRect方法当中系统已经帮你创建一个跟View相关联的上下文(Layer上下文),只要获取上下文就可以了

带有边框的图片裁剪

步骤:

1.假设边框宽度为BorderW

2.开启的图片上下文的尺寸就应该是原始图片的宽高分别加上两倍的BorderW,这样开启的目的是为了不让原始图片变形.

3.在上下文上面添加一个圆形填充路径.位置从0,0点开始,宽高和上下文尺寸一样大.设置颜色为要设置的边框颜色.

4.继续在上下文上面添加一个圆形路径,这个路径为裁剪路径. 它的x,y分别从BorderW这个点开始.宽度和高度分别和原始图片的宽高一样大. 将绘制的这个路径设为裁剪区域.

5.把原始路径绘制到上下文当中.绘制的位置和是裁剪区域的位置相同,x,y分别从border开始绘制.

6.从上下文状态当中取出图片.

7.关闭上下文状态.

代码实现

//

// UIImage+image.h

#import

@interface UIImage (image)

/**

根据传入的图片,生成一终带有边框的圆形图片

参数:边框宽度,边框颜色,原始图片

*/

+ (UIImage *)imageWithBorderW:(CGFloat)borderW borderColor:(UIColor *)color image:(UIImage *)image;

@end

//

// UIImage+image.m

#import "UIImage+image.h"

@implementation UIImage (image)

/**

根据传入的图片,生成一终带有边框的圆形图片

参数:边框宽度,边框颜色,原始图片

*/

+ (UIImage *)imageWithBorderW:(CGFloat)borderW borderColor:(UIColor *)color image:(UIImage *)image{

//1.开启一个和原始图片一样大小的位图上下文.

CGSize size = CGSizeMake(image.size.width + 2 *borderW, image.size.height + 2 * borderW);

UIGraphicsBeginImageContextWithOptions(size,NO,0);

//2.绘制一个大圆,填充

UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, size.width, size.height)];

[color set];

[path fill];

//3.添加一个裁剪区域.

path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(borderW, borderW, image.size.width, image.size.height)];

[path addClip];

//4.把图片绘制到裁剪区域当中.

[image drawAtPoint:CGPointMake(borderW, borderW)];

//5.生成一张新图片.

UIImage *clipImage = UIGraphicsGetImageFromCurrentImageContext();

//6.关闭上下文.

UIGraphicsEndImageContext();

return clipImage;

}

@end

1.drawRect:基本使用

自定义绘图View的步骤 新建一个类,继承UIView 实现drawRect:方法,然后在这个方法里写(4点) 1.获取上下文 2.描述路径 3.把描述路径添加到上下文当中 4.把上下文的内容显示到View上(渲染到View的Layer上)

drawLine画直线

// 画直线

- (void)drawLine{

// 1.获取上下文

CGContextRef ctx = UIGraphicsGetCurrentContext();

// 2.描述路径

UIBezierPath *path = [UIBezierPath bezierPath];

// 设置起点 + 添加一根线到终点

[path moveToPoint:CGPointMake(50, 280)];

[path addLineToPoint:CGPointMake(250, 50)];

// 画第二条线

[path addLineToPoint:CGPointMake(200, 280)];

// 上下文的状态

// 设置线宽

CGContextSetLineWidth(ctx, 10);

// 设置线的连接样式

CGContextSetLineJoin(ctx, kCGLineJoinRound);

// 设置线的顶角样式

CGContextSetLineCap(ctx, kCGLineCapRound);

// 设置颜色

[[UIColor redColor] set];

// 3.把描述的内容添加到上下文

// UIBezierPath:UIKit框架 ,CGPathRef:CoreGraphics框架

CGContextAddPath(ctx, path.CGPath);

// 4.把上下文内容显示到View上(渲染到View的layer)

CGContextStrokePath(ctx);

}

drawCurve画曲线

// 画曲线

- (void)drawCurve{

// 1.获取上下文

CGContextRef ctx = UIGraphicsGetCurrentContext();

// 2.描述路径

UIBezierPath *path = [UIBezierPath bezierPath];

// 画曲线(controlPoint:弯曲方向点)

[path moveToPoint:CGPointMake(50, 280)];

[path addQuadCurveToPoint:CGPointMake(250, 280) controlPoint:CGPointMake(50, 50)];

// 3.把描述内容添加到上下文当中

CGContextAddPath(ctx, path.CGPath);

// 4.把上下文的内容显示到View上(渲染到View的layer上)

// 渲染两种方式(Stroke路径渲染,Fill内容渲染)

android+drawrect边框,drawRect:绘图相关推荐

  1. android 底边框_Android底表

    android 底边框 In this tutorial we'll discuss and implement android Bottom Sheet widget that was introd ...

  2. android的边框设置

    android的边框设置 前端页面中的页面元素都会有边框, html中可以通过border设置边框, android设置元素的边框需要在背景图元素中进行设置: 实现方式一: 实现代码: 在drawab ...

  3. android 设置边框圆角

    android 设置边框圆角 public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) { Bitmap output = Bitma ...

  4. android带边框的RelativeLayout

    android带边框的RelativeLayout 概述 代码实现 概述 这个是小众需求,主要用于某些需要手动控制边框线是否显示的场景,例如底层通过数据参数的形式,配置边框显示的形式.多用于基于c语言 ...

  5. android自定义阴影,Android自定义边框加阴影

    一.前言 Android自定义边框,可以设置任意边框的角度和阴影.我下面分为 四个角度设置边框.两个角度设置边框.半圆球设置边框加两层阴影等. 二.边框分类: 1.四个角度设置边框 效果图: 图片.p ...

  6. Android使用学习之绘图(Canvas,Paint)与手势感应及其应用(乒乓球小游戏)

    作为一个没有学习Android的菜鸟,最近一直在工作之外努力地学习的Android的使用.这周看了下Android的绘图,主要是Canvas,Paint等,感觉需要实践下,下午正好有空,就想整一个乒乓 ...

  7. Android中级——屏幕和绘图

    屏幕和绘图 屏幕 系统屏幕密度 独立像素密度dp 单位转换 XML绘图(需放在Drawable) Bitmap Shape Layer Selector 绘图技巧 Canvas Layer Porte ...

  8. android虚线边框_android 绘制虚线效果

    有的时候我们需要一种虚线效果,比如图片的边框,愤怒的小鸟的飞翔路径,那么怎么绘制这些虚线呢?方法很多,目前我觉得好的有两种: 一.自己创建模式,一个点一个点的绘制. 二.用Android提供的 Das ...

  9. android虚线边框_Android实现代码画虚线边框背景效果

    实现如下边框效果: 虚线画效果,可以使用Android中的xml来做.下面话不多说,直接上代码: android:id="@+id/coupon_popup" android:la ...

最新文章

  1. 兔子生兔子递归的理解
  2. DevExpress TreeList 调优_绑定数据源方式, 放弃原来的AppendNode加载数据的方式
  3. Storm WordCount
  4. python起步输入-[转载]python核心编程学习笔记-python起步
  5. Oracle-修改用户密码为UNLIMITED
  6. Oracle添加定时任务
  7. 【收藏】Vue中ref和$refs的介绍及使用
  8. JSP第十四次课:JSP项目开发高级操作2---在线编辑器应用及前台首页显示商品
  9. 常见优化Sql查询性能的方法收集
  10. client mysql 逗号_mysql comment line client(MySQL命令行常用操作)
  11. BGP——community团体属性(讲解+配置)@
  12. vscode格式化 java_VS CODE中配置JAVA格式化细节
  13. linux文件系统的总体架构,Linux NFS的整体架构与核心代码解析
  14. 大数据可视化平台优点在哪
  15. matlab数据栅格化,新手求卫星降水数据CMORPH_V1.0数据完整处理方法,有matlab打开的代码但是不会处理...
  16. 常见的Python解释器,你了解多少?
  17. 朽木第一至三季/全集Deadwood迅雷下载
  18. 报错:WebMvcConfigurer.class cannot be opened because it does not exist
  19. linux 渗透 系统,初识Linux渗透:从枚举到内核利用
  20. 除了摆地摊or送外卖,程序猿如何体面的赚零花钱?

热门文章

  1. 小学《教育教学知识与能力》教学设计万能模板 稳拿40分
  2. json-cpp使用笔记
  3. 你自己都没趣 生活怎么会有意思
  4. 《Unity着色器和屏幕特效开发秘笈》—— 2.5 法线贴图
  5. MobaXterm下docker容器中运行界面程序
  6. for in 和 for of 的对比
  7. 解决CC2530在zstack中无法进入P0中断的问题
  8. 上采样(upsampling)方法总结
  9. 【SQL】数据筛选过滤(初级)
  10. vb在串口通信中运行时错误‘380’无效属性值