三、简单封装
看到上面 你可以画出 圆角箭头矩形
还记得 .h 中 定义的属性 fillColorStr, 可以进行调用, 随意更改填充颜色, 圆弧角度等.
仅简单封装下 (读者自行严谨封装)
- (void)drawRect:(CGRect)rect {
// 默认圆角角度
float r = 4;
// 居中偏移量(箭头高度)
float offset = 5;
// 设置 箭头位置
float positionNum = 20;
// 定义坐标点 移动量
float changeNum = r + offset;
// 设置画线 长 宽
float w = self.frame.size.width ;
float h = self.frame.size.height;
// 获取文本
CGContextRef context = UIGraphicsGetCurrentContext();
// 设置 边线宽度
CGContextSetLineWidth(context, 0.2);
//边框颜色
CGContextSetStrokeColorWithColor(context, [UIColor grayColor].CGColor);
//矩形填充颜色
if ([self.fillColorStr isEqualToString:@"fillColorChange"]) {
CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
}else{
CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
}
CGContextMoveToPoint(context, r, offset); // 开始坐标左边开始
CGContextAddArcToPoint(context, w, offset, w, changeNum, r); // 右上角角度
CGContextAddArcToPoint(context, w , h - offset, w - changeNum, h - offset, r); // 右下角角度
CGContextAddLineToPoint(context, positionNum + 10, h - offset); // 向左划线
CGContextAddLineToPoint(context, positionNum + 5, h); // 向下斜线
CGContextAddLineToPoint(context, positionNum, h - offset); // 向上斜线
CGContextAddArcToPoint(context, 0, h - offset, 0, h - changeNum, r); // 左下角角度
CGContextAddArcToPoint(context, 0, offset, r, offset, r); // 左上角角度
CGContextDrawPath(context, kCGPathFillStroke); //根据坐标绘制路径
/** 父类调用 放在画完边线 后. 不然 设置的文字会被覆盖 */
[super drawRect:rect];
}
// 当 要改变填充颜色 可以进行调用改变
-(void)setFillColorStr:(NSString *)fillColorStr{
_fillColorStr = fillColorStr;
// 调用- (void)drawRect:(CGRect)rect; 重绘填充颜色
[self setNeedsDisplay];
}

将控件颜色 设置为透明, 一个 自定义的提示框完成. 作者仅提供一种方法, 读者也可用 UIBezierPath等 去实现.
四、补充说明
有人说 直接用图片实现, 都可以 , 看工程需求. 此文主要聊的是
用 - (void)drawRect:(CGRect)rect; 绘制 圆角箭头
介绍CGContextAddArcToPoint的使用
对用图片实现 , 形变问题.
UIImage 类提供
(UIImage*)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight;
简单说明下
图片为 100 * 56 像素
UIImage *tempImage = [UIImage imageNamed:@"tip.png"];
/** 说明 : 创建一个内容可拉伸,边角不拉伸的图片, 单位为像素
* LeftCapWidth: 左边不拉伸区域的宽度
* topCapHeight: 上面不拉伸区域高度
* 之后沿此区域 横纵拉伸, 边角不变
*/
tempImage = [tempImage stretchableImageWithLeftCapWidth:80 topCapHeight:20];
UIImageView *imgView=[[UIImageView alloc]initWithImage:tempImage];
imgView.frame = CGRectMake(100, 100, 200, 56);
[self. view addSubview:imgView];










