iOS小知识点03

作者: 丨n水瓶座菜虫灬 | 来源:发表于2016-05-05 16:05 被阅读438次

关于图形绘制

今天在项目中有一个小需求,需要在视图上绘制一个圆,内部有一个点,点不能超出圆外,于是找了一些关于图形绘制方面的资料。以下只记录一些自己用到的知识点。
1.view的drawRect方法。该方法不能手动调用,是由系统自动调用的,在需要调用该方法时候,可以通过调用setNeedsDisplay方法,这时候系统会去调用drawRect方法。一般情况下,创建一个继承自UIView的类,在该类中重写drawRect方法。例如:
一个继承自UIView的类MyView,在其MyView.m文件中重写:
方法一:

-(void)drawRect:(CGRect)rect {

    // 获取处理的上下文
    CGContextRef context = UIGraphicsGetCurrentContext();
    // 设置线条样式
    CGContextSetLineCap(context, kCGLineCapRound);
    // 设置线条粗细宽度
    CGContextSetLineWidth(context, 1.0);
    // 设置颜色
    CGContextSetRGBStrokeColor(context, 0.5, 0.5, 0.5, 1);
    // 开始一个起始路径
    CGContextBeginPath(context);
    // 画圆
    CGContextAddArc(context, 120, 120, 60, 0, M_PI * 2, YES);
    // 连接上面定义的坐标点
    CGContextStrokePath(context);
}

方法二:

-(void)drawRect:(CGRect)rect {
// 创建UIBezierPath对象
UIBezierPath *bezierPath = [UIBezierPath bezierPath];
// 画圆
[bezierPath addArcWithCenter:CGPointMake(120, 120) radius:60 startAngle:0 endAngle:M_PI * 2 clockwise:YES];
// 设置线宽
bezierPath.lineWidth = 1;
// 设置stroke颜色
[[UIColor blackColor] setStroke];
//  绘制
[bezierPath stroke];
}

在控制器中添加该视图就能看到视图中的绘制的圆形 .

2.使用CAShapeLayer与UIBezierPath 绘图

使用CAShapeLayer与UIBezierPath 绘图可以实现不在view的drawRect方法中就画出一些想要的图形;
步骤:
1.新建UIBezierPath 对象bezierPath;
2.新建CAShapeLayer对象caShapeLayer;
3.将bezierPath的CGPath赋值给caShapeLayer的path,即caShapeLayer.path = bezierPath.CGPath;
4.把caShapeLayer添加到某个显示该图形的layer中。

例如,在viewController中作了如下操作

- (void)setUpUI {
CGPoint arcCenter = CGPointMake([UIScreen mainScreen].bounds.size.width/2, 120);
CGFloat radius = 80;
CGFloat startAngle = 0.0;
CGFloat endAngle = M_PI * 2;
// 创建 UIBezierPath对象
UIBezierPath *bezierPath = [UIBezierPath bezierPathWithArcCenter:arcCenter radius:radius startAngle:startAngle endAngle:endAngle clockwise:YES];
// 创建CAShapeLayer对象
CAShapeLayer *layer = [[CAShapeLayer alloc] init];
layer.path = bezierPath.CGPath;
layer.fillColor = [UIColor clearColor].CGColor;
layer.strokeColor = [UIColor blackColor].CGColor;
layer.lineWidth = 5;
// 将CAShapeLayer对象添加到视图的layer中
[self.view.layer addSublayer:layer];
}

运行程序后,会看到视图中绘制的圆。

相关文章

  • C语言第一部分

    本篇博客的主要知识点是: 01.ios开发概述 02.什么是 ios 03.什么是 ios 开发 04.为什么选择...

  • 两年iOS经验之你忽略的小知识点

    两年iOS经验之你忽略的小知识点 两年iOS经验之你忽略的小知识点

  • iOS小知识点03

    关于图形绘制 今天在项目中有一个小需求,需要在视图上绘制一个圆,内部有一个点,点不能超出圆外,于是找了一些关于图形...

  • iOS小知识点集锦

    title: iOS小知识点集锦date: 2017-06-01 15:28:57categories: "iOS...

  • iOS零碎知识点<高阶版>

    iOS零碎知识点<初级版>iOS零碎知识点<中阶版>iOS零碎知识点<高阶版>iOS零碎知识点<工具篇>

  • iOS零碎知识点<工具篇>

    iOS零碎知识点<初级版>iOS零碎知识点<中阶版>iOS零碎知识点<中阶版>iOS零碎知识点<工具篇>

  • iOS零碎知识点<中阶版>

    iOS零碎知识点<初级版>iOS零碎知识点<中阶版>iOS零碎知识点<高阶版>iOS零碎知识点<工具篇> 获取属性...

  • iOS零碎知识点<初级版>

    iOS零碎知识点<初级版>iOS零碎知识点<中阶版>iOS零碎知识点<高阶版>iOS零碎知识点<工具篇> 优雅的隐...

  • iOS 常用到的知识点(一)

    iOS 常用到的知识点(一)iOS 常用到的知识点(二)iOS 常用到的知识点(三) 1. CGRectGetM...

  • iOS 常用到的知识点(三)

    iOS 常用到的知识点(一)iOS 常用到的知识点(二)iOS 常用到的知识点(三) 1. navigationB...

网友评论

  • kinmo:第二种方法比较好,drawRect很容易造成性能问题。
    kinmo:@丨n水瓶座菜虫灬 嗯嗯,我也是看了这个的
    丨n水瓶座菜虫灬:@July丶ye 嗯嗯,是的,刚在网上看了一篇大神的博客《内存恶鬼drawRect - 谈画图功能的内存优化》,讲得很仔细。

本文标题:iOS小知识点03

本文链接:https://www.haomeiwen.com/subject/rrpdrttx.html