iOS中自定义绘图的多种实现方式

在日常打应用中,有的时候我们需要自己在UIView中自定义绘制一些线条来达到应用打效果,首先我们想到打就是在UIView中打- (void)drawRect:(CGRect)rect方法中进行线条的绘制。

不错,我们是可以这么搞,而且这么搞也比较打不错,但是唯一令人烦心就是在这个方法中写打绘制方法,都是openGL原生态的方法(也就是c语言的语法),一会儿oc,一会儿c是有点儿晕乎乎的,所以今天将介绍另外的一个oc的写法,当然了,第一种drawRect方法中打方法也是会介绍一下的。

第一种方法:在UIView中的- (void)drawRect:(CGRect)rect中绘制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetLineWidth(context, 1.0f);
CGContextSetAllowsAntialiasing(context, false);
CGContextSetStrokeColorWithColor(context, [UIColor redColor].CGColor);

CGContextMoveToPoint(context, 50.0f, 0.0f);
CGContextAddLineToPoint(context, 50.0f, 100.0f);
CGContextMoveToPoint(context, 0.0f, 50.0f);
CGContextAddLineToPoint(context, 100.0f, 50.0f);

CGContextStrokePath(context);
}

通过上述的代码就在UIViews上面画了一个十字架了。

第二种方法:运用CAShapeLayer类添加到UIView的layer上面进行绘制

TestView.h
1
2
3
4
5
#import <Foundation/Foundation.h>

@interface TestView : UIView

@end
TestView.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#import "TestView.h"

@implementation TestView {
CAShapeLayer *shapeLayer;
}

- (instancetype)init {
if ((self = [super init])) {

shapeLayer = [CAShapeLayer layer];
shapeLayer.lineWidth = 1.0f;
shapeLayer.fillColor = [UIColor clearColor].CGColor;
shapeLayer.lineJoin = kCALineCapSquare;
shapeLayer.strokeColor = [UIColor redColor].CGColor;
shapeLayer.strokeEnd = 10.0f;

self.layer.masksToBounds = NO;
}
return self;
}

- (void)layoutSubviews {
[super layoutSubviews];

[self.layer.sublayers makeObjectsPerformSelector:@selector(removeFromSuperlayer)];

shapeLayer.frame = CGRectMake(0.0f, 0.0f, self.layer.frame.size.width, self.layer.frame.size.height);

UIBezierPath *bezierPath = [UIBezierPath bezierPath];
[bezierPath moveToPoint:CGPointMake(self.frame.size.width/2, 0.0f)];
[bezierPath addLineToPoint:CGPointMake(self.frame.size.width/2, self.frame.size.height)];
[bezierPath moveToPoint:CGPointMake(0.0f, self.frame.size.height/2)];
[bezierPath addLineToPoint:CGPointMake(self.frame.size.width, self.frame.size.height/2)];

shapeLayer.path = bezierPath.CGPath;
[self.layer addSublayer:shapeLayer];
}

@end

上述效果和第一种方法一样,都是在UIView上面画了一个十字架

文章目录
  1. 1. 第一种方法:在UIView中的- (void)drawRect:(CGRect)rect中绘制
  2. 2. 第二种方法:运用CAShapeLayer类添加到UIView的layer上面进行绘制
,