三角形代码如下,放到一个自定义View里即可运行:
<pre name="code" class="objc">- (void)drawRect:(CGRect)rect
{
// Drawing code
[super drawRect:rect];
CGContextRef contextRef = UIGraphicsGetCurrentContext();
[[UIColor whiteColor] set];
CGContextFillRect(contextRef, rect);
CGContextSetLineCap(contextRef, kCGLineCapSquare);
CGContextSetRGBStrokeColor(contextRef,0.314, 0.486, 0.859, 1.0);
CGContextBeginPath(contextRef);
CGContextMoveToPoint(contextRef, 160, 80);
CGContextAddLineToPoint(contextRef, 0, 100);
CGContextAddLineToPoint(contextRef,320 , 100);
CGContextAddLineToPoint(contextRef,160, 80);
CGContextStrokePath(contextRef);
}
画圆(里面不填充颜色)
- (void)drawRect:(CGRect)rect
{
// Drawing code
[super drawRect:rect];
CGContextRef contextRef = UIGraphicsGetCurrentContext();
[[UIColor whiteColor] set];
CGContextFillRect(contextRef, rect);
[[UIColor redColor] set];
CGContextAddEllipseInRect(contextRef, CGRectMake(200.0f, 200.0f, 50.0f, 50.0f));
CGContextStrokePath(contextRef);
}
如果里面填充颜色,只要把CGContextAddEllipseInRect改成CGContextFillEllipseInRect就可以了
画矩形:
- (void)drawRect:(CGRect)rect
{
// Drawing code
[super drawRect:rect];
CGContextRef contextRef = UIGraphicsGetCurrentContext();
[[UIColor whiteColor] set];
CGContextFillRect(contextRef, rect);
[[UIColor redColor] set];
// CGContextAddEllipseInRect(contextRef, CGRectMake(200.0f, 200.0f, 50.0f, 50.0f));
CGContextFillRect(contextRef, CGRectMake(200.0f, 200.0f, 50.0f, 50.0f));
CGContextStrokePath(contextRef);
}
画曲线
- (void)drawRect:(CGRect)rect
{
// Drawing code
[super drawRect:rect];
CGContextRef contextRef = UIGraphicsGetCurrentContext();
[[UIColor whiteColor] set];
CGContextFillRect(contextRef, rect);
[[UIColor redColor] set];
CGContextSetLineWidth(contextRef, 2.0);
CGContextSetStrokeColorWithColor(contextRef, [UIColor blueColor].CGColor);
CGContextMoveToPoint(contextRef, 10, 10);
CGContextAddCurveToPoint(contextRef, 200, 50, 100, 400, 300, 400);
CGContextStrokePath(contextRef);
}
其中CGContextAddCurveToPoint的参数含义是它有1个起点,1个终点,其余两个是控制点,决定曲线的走向,可以如下图所示
用手指画线:(viewController里带有一个imageview,然后有一个prePoint的属性,下面的代码是写在viewController里的):
- (UIImage *)drawLineWithColor:(UIColor *)color width:(CGFloat)width startPoint:(CGPoint)startPoint endPoint:(CGPoint)endPoint
{
UIImage *image = nil;
UIGraphicsBeginImageContext(self.imageview.frame.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, width);
CGContextSetStrokeColorWithColor(context, [color CGColor]);
CGContextMoveToPoint(context, startPoint.x, startPoint.y);
CGContextAddLineToPoint(context, endPoint.x, endPoint.y);
CGContextStrokePath(context);
image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
#pragma mark - deal touch
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"touchesBegan");
//下面两句知道手指在屏幕上的点的信息
UITouch* touch = [touches anyObject];
CGPoint point = [touch locationInView:self.imageview];
if (touch) {
self.prePoint = point;
}
NSLog(@"x=%f,y=%f",point.x,point.y);
}
-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"touchesMoved");
UITouch* touch = [touches anyObject];
if (touch) {
CGPoint point = [touch locationInView:self.imageview];
self.imageview.image = [self drawLineWithColor:[UIColor redColor] width:3.0f startPoint:self.prePoint endPoint:point];
}
}
-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"touchesEnded");
}