本文是关于iOS代码画气泡,手把手教你画一个气泡,其他形状请读者自行尝试,希望大家玩的开心!
// // SpeechBubbleView.m // demo // // Created by mygame on 15/3/4. // Copyright (c) 2015年 mygame. All rights reserved. // #import "SpeechBubbleView.h" #import <CoreGraphics/CoreGraphics.h> #define kPopupTriangleHeigh 12 #define kPopupTriangleWidth 22 #define kBorderOffset 0//0.5f @implementation SpeechBubbleView - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { self.backgroundColor = [UIColor purpleColor]; } return self; } - (void)drawRect:(CGRect)rect { [super drawRect:rect]; CGFloat viewW = rect.size.width; CGFloat viewH = rect.size.height; CGFloat strokeWidth = 1; CGFloat borderRadius = 10; CGFloat offset = strokeWidth + kBorderOffset; CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetLineJoin(context, kCGLineJoinRound); // CGContextSetLineWidth(context, strokeWidth); // 设置画笔宽度 CGContextSetStrokeColorWithColor(context, [UIColor lightGrayColor].CGColor); // 设置画笔颜色 CGContextSetFillColorWithColor(context, [UIColor lightGrayColor].CGColor); // 设置填充颜色 // 画三角形 /* ---\/ */ /*画红色部分
*/ CGContextBeginPath(context); CGContextMoveToPoint(context, borderRadius+offset, viewH-kPopupTriangleHeigh-offset); CGContextAddLineToPoint(context, round((viewW-kPopupTriangleWidth)/ 2.0f) + offset, viewH-kPopupTriangleHeigh-offset); CGContextAddLineToPoint(context, round(viewW/2.0f), viewH-offset); CGContextAddLineToPoint(context, round((viewW+kPopupTriangleWidth)/2.0f)+offset, viewH-kPopupTriangleHeigh-offset); // 画其余部分 /*
*/ CGContextAddArcToPoint(context, viewW-offset, viewH-kPopupTriangleHeigh-offset, viewW-offset, kPopupTriangleHeigh+offset, borderRadius-strokeWidth); CGContextAddArcToPoint(context, viewW-offset, offset, viewW-borderRadius-offset, offset, borderRadius-strokeWidth); CGContextAddArcToPoint(context, offset, offset, offset, borderRadius+offset, borderRadius-strokeWidth); CGContextAddArcToPoint(context, offset, viewH-kPopupTriangleHeigh-offset, borderRadius+offset, viewH-kPopupTriangleHeigh-offset, borderRadius-strokeWidth); CGContextClosePath(context); CGContextDrawPath(context, kCGPathFillStroke); } @end
关于CGContextAddArcToPoint接口解释请点击这里
来源:https://www.cnblogs.com/ericiOScnblogs/p/4314689.html